[PATCH] D127135: [Object][Archive] Support a new archive member /<ECSYMBOLS>/

Pengxuan Zheng via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 6 11:00:06 PDT 2022


pzheng created this revision.
pzheng added reviewers: rnk, jhenderson, thieta, psamolysov-intel, thakis, hans.
Herald added subscribers: hiraditya, kristof.beyls.
Herald added a project: All.
pzheng requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Some libraries (e.g., arm64rt.lib) from the Windows WDK (version 10.0.22000.0)
contain an undocumented special member '/<ECSYMBOLS>/'. This causes llvm-lib to
fail with the following error:

"truncated or malformed archive (long name offset characters after the '/' are
not all decimal numbers: '<ECSYMBOLS>/' for archive member header at offset 162)"

The '/<ECSYMBOLS>/' member does not seem to be documented anywhere, but might be
related to the ARM64EC ABI Microsoft announced last year.

https://blogs.windows.com/windowsdeveloper/2021/06/28/announcing-arm64ec-building-native-and-interoperable-apps-for-windows-11-on-arm/


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D127135

Files:
  llvm/lib/Object/Archive.cpp
  llvm/test/tools/llvm-lib/Inputs/ecsymbols.yaml
  llvm/test/tools/llvm-lib/ecsymbols.test


Index: llvm/test/tools/llvm-lib/ecsymbols.test
===================================================================
--- /dev/null
+++ 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 /<ECSYMBOLS>/.
+
+# RUN: yaml2obj %S/Inputs/ecsymbols.yaml -o %t.lib
+# RUN: llvm-lib /list %t.lib | FileCheck %s
+
+# CHECK: /<ECSYMBOLS>/
Index: llvm/test/tools/llvm-lib/Inputs/ecsymbols.yaml
===================================================================
--- /dev/null
+++ 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:            '/<ECSYMBOLS>/'
+    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
+...
Index: llvm/lib/Object/Archive.cpp
===================================================================
--- llvm/lib/Object/Archive.cpp
+++ llvm/lib/Object/Archive.cpp
@@ -261,6 +261,10 @@
     // It looks like a CFG guard: we just skip it for now.
     if (Name.equals("/<XFGHASHMAP>/"))
       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("/<ECSYMBOLS>/"))
+      return Name;
     // It's a long name.
     // Get the string table offset.
     std::size_t StringOffset;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D127135.434537.patch
Type: text/x-patch
Size: 6114 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220606/405a0e56/attachment.bin>


More information about the llvm-commits mailing list