diff --git a/llvm/lib/Object/Archive.cpp b/llvm/lib/Object/Archive.cpp --- a/llvm/lib/Object/Archive.cpp +++ b/llvm/lib/Object/Archive.cpp @@ -261,6 +261,10 @@ // It looks like a CFG guard: we just skip it for now. if (Name.equals("//")) return Name; + // Some libraries (e.g., arm64rt.lib) from the Windows WDK + // (version 10.0.22000.0) contain this undocumented special member. + if (Name.equals("//")) + return Name; // It's a long name. // Get the string table offset. std::size_t StringOffset; diff --git a/llvm/test/tools/llvm-lib/Inputs/ecsymbols.yaml b/llvm/test/tools/llvm-lib/Inputs/ecsymbols.yaml new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-lib/Inputs/ecsymbols.yaml @@ -0,0 +1,36 @@ +--- !Arch +Members: + - Name: '/' + LastModified: '1654282752' + UID: '' + GID: '' + Size: '12' + Content: 0000000100000666666F6F00 + - Name: '/' + LastModified: '1654282752' + UID: '' + GID: '' + Size: '22' + Content: 02000000FC00000066060000010000000200666F6F00 + - Name: '//' + LastModified: '1654282752' + UID: '' + GID: '' + Size: '30' + Content: 020000000100010023666F6F0023666F6F24656E7472795F7468756E6B00 + - Name: 'foo-arm64ec.obj/' + LastModified: '1654282644' + UID: '' + GID: '' + AccessMode: '100666' + Size: '1326' + Content: 41A6080094599A62E50200001A000000000000002E6472656374766500000000000000002F00000054010000000000000000000000000000000A10002E6465627567245300000000000000006C00000083010000000000000000000000000000400010422E74657874246D6E000000000000000004000000EF010000000000000000000000000000201040602F31303600000000000000000000000044000000F3010000370200000000000003000000201040602E6879626D70247800000000000000000C00000055020000000000000000000000000000000230002E7864617461000000000000000000002800000061020000000000000000000000000000401030402E7064617461000000000000000000000800000089020000910200000000000002000000401030402E63686B73363400000000000000000040000000A5020000000000000000000000000000000A00002020202F44454641554C544C49423A224C4942434D5422202F44454641554C544C49423A224F4C444E414D4553222004000000F1000000600000002200011100000000433A5C546573745C6462675C666F6F2D61726D363465632E6F626A003A003C1100220000F60013001C00D974000013001C00D97400004D6963726F736F667420285229204F7074696D697A696E6720436F6D70696C657200C0035FD6E61FBBADE82701ADEA2F02ADEC3703ADEE3F04ADFD7BBFA9FD03009100000094FD7BC1A8EE3F44ADEC3743ADEA2F42ADE82741ADE61FC5AC10000090100240F900021FD61C0000000D0000000300380000001700000004003C0000001700000007000D0000000A000000010000001100404008008002E181E6E6E6E6E76689E481E74E88E74C86E74A84E74882E76689E3E3E4E3E3E30000000000000000000000001000000002000400000013000000020023076615271ABF1A8BFCFA69A2998435110F46B5B35C069178233A91EC95CCE17797C53050E1C5BC29297C37C1BD54D3AF5570F5A1810B7A000000000000000040636F6D702E6964D9740401FFFF0000030040666561742E303090010180FFFF000003002E64726563747665000000000100000003012F00000000000000000000000000000000002E64656275672453000000000200000003016C00000000000000000000000000000000002E74657874246D6E000000000300000003010400000000000000256698260000010000000000000004000000000000000400000003014400000003000000B8305D5A000002000000000000000F000000000000000400200002002E6879626D702478000000000500000003010C000000000000002230F7D400000000000023666F6F0000000000000000030020000200666F6F0000000000000000000000200069010D0000000400000000000000000000000000244C4E3100000000000000000400000006002E786461746100000000000006000000030128000000000000008C6353F80400050000000000000020000000000000000600000003002E70646174610000000000000700000003010800000002000000000000000400050000000000000039000000000000000700000003000000000051000000000000000000000002002E63686B7336340000000000080000000301400000000000000000000000000000000000750000002E776F7774686B2461610023666F6F24656E7472795F7468756E6B0024756E77696E642423666F6F24656E7472795F7468756E6B002470646174612423666F6F24656E7472795F7468756E6B005F5F6F735F61726D3634785F64697370617463685F726574002E776F7774686B24616100 + - Name: 'foo-arm64.obj/' + LastModified: '1654282562' + UID: '' + GID: '' + AccessMode: '100666' + Size: '573' + Content: 64AA040042599A62730100000B000000000000002E6472656374766500000000000000002F000000B4000000000000000000000000000000000A10002E6465627567245300000000000000006C000000E3000000000000000000000000000000400010422E74657874246D6E0000000000000000040000004F010000000000000000000000000000200040602E63686B7336340000000000000000002000000053010000000000000000000000000000000A00002020202F44454641554C544C49423A224C4942434D5422202F44454641554C544C49423A224F4C444E414D4553222004000000F10000005E0000002000011100000000433A5C546573745C6462675C666F6F2D61726D36342E6F626A003A003C1100220000F60013001C00D974000013001C00D97400004D6963726F736F667420285229204F7074696D697A696E6720436F6D70696C6572000000C0035FD623076615271ABF1A9AC165C4AC56EA1F110F46B5B35C0691000000000000000040636F6D702E6964D9740401FFFF0000030040666561742E303090010180FFFF000003002E64726563747665000000000100000003012F00000000000000000000000000000000002E64656275672453000000000200000003016C00000000000000000000000000000000002E74657874246D6E00000000030000000301040000000000000025669826000000000000666F6F0000000000000000000300200002002E63686B733634000000000004000000030120000000000000000000000000000000000004000000 + PaddingByte: 0xA +... diff --git a/llvm/test/tools/llvm-lib/ecsymbols.test b/llvm/test/tools/llvm-lib/ecsymbols.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-lib/ecsymbols.test @@ -0,0 +1,7 @@ +# Check that llvm-lib can list the members of an archive which contains the +# special member //. + +# RUN: yaml2obj %S/Inputs/ecsymbols.yaml -o %t.lib +# RUN: llvm-lib /list %t.lib | FileCheck %s + +# CHECK: //