[PATCH] D99978: Fixed CodeView GuidAdapter::format to handle GUID bytes in the right order.

Reid Kleckner via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 7 10:36:54 PDT 2021


rnk added inline comments.


================
Comment at: llvm/lib/DebugInfo/CodeView/Formatters.cpp:28
   static const char *Lookup = "0123456789ABCDEF";
+  static const uint8_t Order[16] = {3, 2, 1,  0,  5,  4,  7,  6,
+                                    8, 9, 10, 11, 12, 13, 14, 15};
----------------
aganea wrote:
> I know the patch you're proposing is more optimal in terms of runtime performance, but it adds an extra layer of complexity for a reader who was to figure out why memory is read in that way. Since GUIDs are not that used in binary files, performance is maybe less of a concern. We could maybe rewrite the code to be more self-documenting, something along those lines?
> ```
> void GuidAdapter::format(raw_ostream &Stream, StringRef Style) {
>   assert(Item.size() == 16 && "Expected 16-byte GUID");
>   struct _GUID {
>     support::ulittle32_t Data1;
>     support::ulittle16_t Data2;
>     support::ulittle16_t Data3;
>     support::ubig64_t Data4;
>   };
>   const _GUID *G = reinterpret_cast<const _GUID *>(Item.data());
>   Stream << "{"
>          << format_hex_no_prefix(G->Data1, sizeof(G->Data1), /*Upper=*/true)
>          << '-'
>          << format_hex_no_prefix(G->Data2, sizeof(G->Data2), /*Upper=*/true)
>          << '-'
>          << format_hex_no_prefix(G->Data3, sizeof(G->Data3), /*Upper=*/true)
>          << '-'
>          << format_hex_no_prefix(G->Data4, sizeof(G->Data4), /*Upper=*/true)
>          << "}";
> }
> ```
+1


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99978/new/

https://reviews.llvm.org/D99978



More information about the llvm-commits mailing list