From 8355a030c0e12690b201f67e3d6e70566d0d169a Mon Sep 17 00:00:00 2001 From: CarlosAlbertoEnciso Date: Tue, 15 Jun 2021 06:52:50 +0100 Subject: [PATCH] [Debug-Info][CodeView] Fix GUID string generation for MSVC generated objects. This patch is to address https://bugs.llvm.org/show_bug.cgi?id=50459. YAML:455:28: error: GUID strings are 38 characters long The valid format for a GUID is {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} where X is a hex digit (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F). The length of the individual components must be: 8, 4, 4, 4, 12. For some cases, the converted string generated by obj2yaml, does not comply with those lengths. yaml2obj checks that the GUID string must be 38 characters including the dashes and braces. Reviewed By: amccarth Differential Revision: https://reviews.llvm.org/D103089 --- lib/DebugInfo/CodeView/Formatters.cpp | 21 ++- test/tools/obj2yaml/COFF/Inputs/test-1.o | Bin 0 -> 3312 bytes test/tools/obj2yaml/COFF/Inputs/test-2.o | Bin 0 -> 1908 bytes test/tools/obj2yaml/COFF/Inputs/test-3.o | Bin 0 -> 3631 bytes test/tools/obj2yaml/COFF/Inputs/test-4.o | Bin 0 -> 3284 bytes test/tools/obj2yaml/COFF/Inputs/test-5.o | Bin 0 -> 3083 bytes test/tools/obj2yaml/COFF/Inputs/test-6.o | Bin 0 -> 2748 bytes test/tools/obj2yaml/COFF/test-1.test | 4 + test/tools/obj2yaml/COFF/test-2.test | 4 + test/tools/obj2yaml/COFF/test-3.test | 4 + test/tools/obj2yaml/COFF/test-4.test | 4 + test/tools/obj2yaml/COFF/test-5.test | 4 + test/tools/obj2yaml/COFF/test-6.test | 4 + unittests/DebugInfo/CodeView/CMakeLists.txt | 1 + .../DebugInfo/CodeView/GUIDFormatTest.cpp | 143 ++++++++++++++++++ 15 files changed, 184 insertions(+), 5 deletions(-) create mode 100755 test/tools/obj2yaml/COFF/Inputs/test-1.o create mode 100755 test/tools/obj2yaml/COFF/Inputs/test-2.o create mode 100755 test/tools/obj2yaml/COFF/Inputs/test-3.o create mode 100755 test/tools/obj2yaml/COFF/Inputs/test-4.o create mode 100755 test/tools/obj2yaml/COFF/Inputs/test-5.o create mode 100755 test/tools/obj2yaml/COFF/Inputs/test-6.o create mode 100755 test/tools/obj2yaml/COFF/test-1.test create mode 100755 test/tools/obj2yaml/COFF/test-2.test create mode 100755 test/tools/obj2yaml/COFF/test-3.test create mode 100755 test/tools/obj2yaml/COFF/test-4.test create mode 100755 test/tools/obj2yaml/COFF/test-5.test create mode 100755 test/tools/obj2yaml/COFF/test-6.test create mode 100755 unittests/DebugInfo/CodeView/GUIDFormatTest.cpp diff --git a/lib/DebugInfo/CodeView/Formatters.cpp b/lib/DebugInfo/CodeView/Formatters.cpp index 3a67f313d33..f1f51bcb39c 100644 --- a/lib/DebugInfo/CodeView/Formatters.cpp +++ b/lib/DebugInfo/CodeView/Formatters.cpp @@ -23,6 +23,17 @@ GuidAdapter::GuidAdapter(StringRef Guid) GuidAdapter::GuidAdapter(ArrayRef Guid) : FormatAdapter(std::move(Guid)) {} +// From https://docs.microsoft.com/en-us/windows/win32/msi/guid documentation: +// The GUID data type is a text string representing a Class identifier (ID). +// All GUIDs must be authored in uppercase. +// The valid format for a GUID is {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} where +// X is a hex digit (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F). +// +// The individual string components must be padded to comply with the specific +// lengths of {8-4-4-4-12} characters. +// The llvm-yaml2obj tool checks that a GUID follow that format: +// - the total length to be 38 (including the curly braces. +// - there is a dash at the positions: 8, 13, 18 and 23. void GuidAdapter::format(raw_ostream &Stream, StringRef Style) { assert(Item.size() == 16 && "Expected 16-byte GUID"); struct MSGuid { @@ -33,11 +44,11 @@ void GuidAdapter::format(raw_ostream &Stream, StringRef Style) { }; const MSGuid *G = reinterpret_cast(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 >> 48, 2, /*Upper=*/true) << '-' - << format_hex_no_prefix(G->Data4 & ((1ULL << 48) - 1), 6, /*Upper=*/true) + << '{' << format_hex_no_prefix(G->Data1, 8, /*Upper=*/true) + << '-' << format_hex_no_prefix(G->Data2, 4, /*Upper=*/true) + << '-' << format_hex_no_prefix(G->Data3, 4, /*Upper=*/true) + << '-' << format_hex_no_prefix(G->Data4 >> 48, 4, /*Upper=*/true) << '-' + << format_hex_no_prefix(G->Data4 & ((1ULL << 48) - 1), 12, /*Upper=*/true) << '}'; } diff --git a/test/tools/obj2yaml/COFF/Inputs/test-1.o b/test/tools/obj2yaml/COFF/Inputs/test-1.o new file mode 100755 index 0000000000000000000000000000000000000000..d351d4bef53d4a49a46766da26e61537dbca3052 GIT binary patch literal 3312 zcmb_fU1%It6h51z$#yqFHb1qbsU6~K)0%8j8k=-%<0jcnQ^=nt1uffdXLo0JCvJAe znc1|~RD$LqZ3@;m5d~lRB={s0OF^MUP>Krr*asB^ANmrtpwJS(GdnZcZ9+{#4!LvA z{q8yUo^R&vy(c4{9mI0gPgG}FM4^-}C(T*e?oua=drrsEzB>5Hi9#kg=|FQ{qFN8p z;?5${2ofQBX`drWQ=CV8+fX`B+j-$+L=lzC%kTVrpVKmXq?Cf|QYCmTNp+ z$R|xi#=8!MR1)b}z#|aVPy=4}b%k6#sw8#QP}8Q+_UZv)Tr-s!<)V_$2!ra3rsQOu z>M0nA$7hpq$uxB(Q7~nL8i8fyoF?m~Xf;sD%n@tDOj&wta)Rgq_yo}$VS>z=8_NKi z)93f_4qAv#SnmO*B~Hv!=v6oyhCG;G6cdt8EmU9U%x8xJG zMGT`W5JpGTq?EJJ3L3{^e*)`8bHqu8*J!svq%qHZjLq}5s)y$M8lX4Jc@A+;;#|3D z&J8wa6EjKi_!! z`GVs-^Tkix;#&*Ne9_kM<+Gqvcu(`W!STyzV`v8-+tVDwKF_07t@6b$%(S=yUQe)} zSNG^}iHDOzHLzng-i%y%jXiemEzrPdFLV(48E9UAA2jFL1LqF%2F8%jV?TRQlxO9< z88_5|o|OBYH=ArmGyEyyEYNv zuCyO3HLMpnqoxX_OgJU)1{~d)>2Lgga266u5vucq@24jckED0MdH?%`oAkvf(O- zTqvGJUZhY>BZ0kO_Xlh~%WJ3`X|v_0Ufc4~$1e7%i`|38MNbX2RTM2hwcD1DuDaMY z7rP4!XD1?d<8)!mPc63Pqd6DjgNjFebPE=rv^C_#0m_!2YHiC$VHbNZF7>_n(VkzC>~_{tD7R?&)YAP|u0*|y(UmLFm8IX$+`d~bJiZk5UXDIo z!rzw0r<43)=)F5t*?&R7=}e~_>+siSZl~eFU#yV~Jo(Kv(k0g-dbTFrw7>bQ=J`86 zXTJOVQTFVQzudT~UH-Bo@!W5pe7JA}u9k$8DE2~1>bkPSv$Dc>QaCM3W~i&{0}ss? zkHV%6n`f4Lv4c+AV`$O3Xxh6O;eQ*)dHHNNuiS4N^OW3B3X`oO|GP|WuH?~ z38^a*3la+hY!&}Nkzn9+VPj!sVnhrSrcULZVbv$Tz`)x?QPiobB_SMU+r<|9-_&dfBfGCQSx%_<`xU_ zPH##sa*%KdFgC5u!nV%yZHPuLD+q+~eEbXaMV)=Qe9lLjT5 z6Q*7+8Rhj-O|4fPwL(fRRiX7Nu_#mP8c|YHNdqLf9u-7@0XPK_*rCu`7pZ0$wz0;< z@s$hWvdQQM-JpA35lqpG&DtJ%%Ww75gSe;RwXr)SV6QOQI*wzuQt;$ z51!Y95I_{dQT*$?kyUMiF2d0>EhvZaHi(XwVbDc$`IUuYJ_o~Sb73~KnuiHA6g2*d zMv_Q_)R|%%j-`=|A0^Bn{cg{6Niv$r6NSJPlok&mW%o@kyNR+wH`zb$N|G8=idth_ z*p7G}^~*=sOOh7{&s^@&k7MJ#X@`(S>8&G4CCPP#ui+y4$aV9iptb-Esz)gN2hzHx8CF=%2M5A%`1l$i{QPrI`bJjgrIfO z7@m~qCfqP|CzuHj>1+?gmS_Cxe&fUv=??x)4&v+wIeHHL{J=eyE&SAedb=SwaBYr- zP&Vx1ysoZ8EEakCaz+S0y!|>g_wC@r{1fi?|JEz4YVd3C{J>glZ1mmee*DYZ7rRSu zQlCDCpMQV#43Fy=X$>n?lIlCOPdLE9Ly%r0DodtPj|JFnBEjCm;|&SCyL66VUpa=4 zLIUqBJnQxd_7p5@$T8awy&z!^01Bl@q!P!KD{f4)#ZhkHyKFiB# WIz3(FH8P#fz^qqHIp)<-4*vmtfajtB literal 0 HcmV?d00001 diff --git a/test/tools/obj2yaml/COFF/Inputs/test-3.o b/test/tools/obj2yaml/COFF/Inputs/test-3.o new file mode 100755 index 0000000000000000000000000000000000000000..e23fbff66e33c611e87657635abe9f20267950ae GIT binary patch literal 3631 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 +using GuidData = SmallVector; + +void checkData(GuidData &Data) { + for (auto Item : Data) { + std::string GuidText(formatv("{0}", Item.second).str()); + StringRef Scalar(GuidText); + + // GUID strings are 38 characters long. + EXPECT_EQ(Scalar.size(), size_t(38)); + + // GUID must be enclosed in {} + EXPECT_EQ(Scalar.front(), '{'); + EXPECT_EQ(Scalar.back(), '}'); + + Scalar = Scalar.substr(1, Scalar.size() - 2); + SmallVector Component; + Scalar.split(Component, '-', 5); + + // GUID must have 5 components. + EXPECT_EQ(Component.size(), size_t(5)); + + // GUID components are properly delineated with dashes. + EXPECT_EQ(Scalar[8], '-'); + EXPECT_EQ(Scalar[13], '-'); + EXPECT_EQ(Scalar[18], '-'); + EXPECT_EQ(Scalar[23], '-'); + + // GUID only contains hex digits. + struct { + support::ulittle32_t Data0; + support::ulittle16_t Data1; + support::ulittle16_t Data2; + support::ubig16_t Data3; + support::ubig64_t Data4; + } G = {}; + EXPECT_TRUE(to_integer(Component[0], G.Data0, 16)); + EXPECT_TRUE(to_integer(Component[1], G.Data1, 16)); + EXPECT_TRUE(to_integer(Component[2], G.Data2, 16)); + EXPECT_TRUE(to_integer(Component[3], G.Data3, 16)); + EXPECT_TRUE(to_integer(Component[4], G.Data4, 16)); + + // Check the values are the same. + EXPECT_EQ(Scalar, Item.first); + } +} + +TEST(GUIDFormatTest, ValidateFormat) { + // Shifting 2 (0x00) + GuidData Data = { + // Non-zero values in all components. + {"11223344-5566-7788-99AA-BBCCDDEEFFAA", + {0x44, 0x33, 0x22, 0x11, 0x66, 0x55, 0x88, 0x77, 0x99, 0xaa, 0xbb, 0xcc, + 0xdd, 0xee, 0xff, 0xaa}}, + + // Zero values in all components. + {"00000000-0000-0000-0000-000000000000", + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00}}, + + // Shift 2 (0x00) across all components + {"00003344-5566-7788-99AA-BBCCDDEEFFAA", + {0x44, 0x33, 0x00, 0x00, 0x66, 0x55, 0x88, 0x77, 0x99, 0xaa, 0xbb, 0xcc, + 0xdd, 0xee, 0xff, 0xaa}}, + {"11000044-5566-7788-99AA-BBCCDDEEFFAA", + {0x44, 0x00, 0x00, 0x11, 0x66, 0x55, 0x88, 0x77, 0x99, 0xaa, 0xbb, 0xcc, + 0xdd, 0xee, 0xff, 0xaa}}, + {"11220000-5566-7788-99AA-BBCCDDEEFFAA", + {0x00, 0x00, 0x22, 0x11, 0x66, 0x55, 0x88, 0x77, 0x99, 0xaa, 0xbb, 0xcc, + 0xdd, 0xee, 0xff, 0xaa}}, + {"11223300-0066-7788-99AA-BBCCDDEEFFAA", + {0x00, 0x33, 0x22, 0x11, 0x66, 0x00, 0x88, 0x77, 0x99, 0xaa, 0xbb, 0xcc, + 0xdd, 0xee, 0xff, 0xaa}}, + {"11223344-0000-7788-99AA-BBCCDDEEFFAA", + {0x44, 0x33, 0x22, 0x11, 0x00, 0x00, 0x88, 0x77, 0x99, 0xaa, 0xbb, 0xcc, + 0xdd, 0xee, 0xff, 0xaa}}, + {"11223344-5500-0088-99AA-BBCCDDEEFFAA", + {0x44, 0x33, 0x22, 0x11, 0x00, 0x55, 0x88, 0x00, 0x99, 0xaa, 0xbb, 0xcc, + 0xdd, 0xee, 0xff, 0xaa}}, + {"11223344-5566-0000-99AA-BBCCDDEEFFAA", + {0x44, 0x33, 0x22, 0x11, 0x66, 0x55, 0x00, 0x00, 0x99, 0xaa, 0xbb, 0xcc, + 0xdd, 0xee, 0xff, 0xaa}}, + {"11223344-5566-7700-00AA-BBCCDDEEFFAA", + {0x44, 0x33, 0x22, 0x11, 0x66, 0x55, 0x00, 0x77, 0x00, 0xaa, 0xbb, 0xcc, + 0xdd, 0xee, 0xff, 0xaa}}, + {"11223344-5566-7788-0000-BBCCDDEEFFAA", + {0x44, 0x33, 0x22, 0x11, 0x66, 0x55, 0x88, 0x77, 0x00, 0x00, 0xbb, 0xcc, + 0xdd, 0xee, 0xff, 0xaa}}, + {"11223344-5566-7788-9900-00CCDDEEFFAA", + {0x44, 0x33, 0x22, 0x11, 0x66, 0x55, 0x88, 0x77, 0x99, 0x00, 0x00, 0xcc, + 0xdd, 0xee, 0xff, 0xaa}}, + {"11223344-5566-7788-99AA-0000DDEEFFAA", + {0x44, 0x33, 0x22, 0x11, 0x66, 0x55, 0x88, 0x77, 0x99, 0xaa, 0x00, 0x00, + 0xdd, 0xee, 0xff, 0xaa}}, + {"11223344-5566-7788-99AA-BB0000EEFFAA", + {0x44, 0x33, 0x22, 0x11, 0x66, 0x55, 0x88, 0x77, 0x99, 0xaa, 0xbb, 0x00, + 0x00, 0xee, 0xff, 0xaa}}, + {"11223344-5566-7788-99AA-BBCC0000FFAA", + {0x44, 0x33, 0x22, 0x11, 0x66, 0x55, 0x88, 0x77, 0x99, 0xaa, 0xbb, 0xcc, + 0x00, 0x00, 0xff, 0xaa}}, + {"11223344-5566-7788-99AA-BBCCDD0000AA", + {0x44, 0x33, 0x22, 0x11, 0x66, 0x55, 0x88, 0x77, 0x99, 0xaa, 0xbb, 0xcc, + 0xdd, 0x00, 0x00, 0xaa}}, + {"11223344-5566-7788-99AA-BBCCDDEE0000", + {0x44, 0x33, 0x22, 0x11, 0x66, 0x55, 0x88, 0x77, 0x99, 0xaa, 0xbb, 0xcc, + 0xdd, 0xee, 0x00, 0x00}}, + }; + + checkData(Data); +} +} // namespace