[PATCH] D126509: [Objcopy][Wasm] Allow selecting known sections by name

Derek Schuff via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri May 27 08:34:56 PDT 2022


dschuff updated this revision to Diff 432572.
dschuff added a comment.

- Merge branch 'sectionTypeToString' into objcopy-known


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D126509

Files:
  llvm/lib/ObjCopy/wasm/WasmReader.cpp
  llvm/test/tools/llvm-objcopy/wasm/dump-section.test
  llvm/test/tools/llvm-objcopy/wasm/only-keep-debug.test
  llvm/test/tools/llvm-objcopy/wasm/remove-section.test


Index: llvm/test/tools/llvm-objcopy/wasm/remove-section.test
===================================================================
--- llvm/test/tools/llvm-objcopy/wasm/remove-section.test
+++ llvm/test/tools/llvm-objcopy/wasm/remove-section.test
@@ -8,6 +8,12 @@
 ## Requests to remove nonexistent sections are silently ignored.
 # RUN: llvm-objcopy --remove-section=nonexistent=%t.sec %t 2>&1 | count 0
 
+## Remove the type section.
+# RUN: llvm-objcopy -R TYPE %t %t3
+# RUN: obj2yaml %t3 | FileCheck --check-prefix=REMOVETYPE --implicit-check-not=TYPE %s
+## Check that the producers section is still there.
+# REMOVETYPE: producers
+
 --- !WASM
 FileHeader:
   Version: 0x00000001
Index: llvm/test/tools/llvm-objcopy/wasm/only-keep-debug.test
===================================================================
--- llvm/test/tools/llvm-objcopy/wasm/only-keep-debug.test
+++ llvm/test/tools/llvm-objcopy/wasm/only-keep-debug.test
@@ -8,7 +8,13 @@
 # RUN: llvm-strip --only-keep-debug --keep-section=foo %t
 # RUN: obj2yaml %t | FileCheck --implicit-check-not=Name --check-prefix=CHECK --check-prefix=KEEP %s
 
+## Test that keep-section overrides only-keep-debug, even for known sections.
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-strip --only-keep-debug --keep-section=TYPE %t
+# RUN: obj2yaml %t | FileCheck --implicit-check-not=Name --check-prefix=CHECK --check-prefix=KEEPTYPE %s
+
 # CHECK:      Sections:
+# KEEPTYPE:       Type: TYPE
 # CHECK:        - Type: CUSTOM
 # CHECK-NEXT:     Name: .debug_info
 # CHECK:        - Type: CUSTOM
Index: llvm/test/tools/llvm-objcopy/wasm/dump-section.test
===================================================================
--- llvm/test/tools/llvm-objcopy/wasm/dump-section.test
+++ llvm/test/tools/llvm-objcopy/wasm/dump-section.test
@@ -13,6 +13,15 @@
 # NONEXISTENT: section 'nonexistent' not found
 # DIROUT: error: {{.*}}/bar': [[MSG]]
 
+## Test dumping the type section (a known section)
+# RUN: llvm-objcopy --dump-section=TYPE=%t.sec %t
+# RUN: od -t x1 %t.sec | FileCheck %s --check-prefix=TYPESEC
+
+## Raw contents of the type section.
+# TYPESEC: 000000 01 60 01 7f 01 7d
+# TYPESEC: 000006
+
+
 ## Check that dumping and removing a section works in the same invocation
 # RUN: llvm-objcopy --dump-section=producers=%t.sec --remove-section=producers %t %t2
 # RUN: od -t x1 %t.sec | FileCheck %s
Index: llvm/lib/ObjCopy/wasm/WasmReader.cpp
===================================================================
--- llvm/lib/ObjCopy/wasm/WasmReader.cpp
+++ llvm/lib/ObjCopy/wasm/WasmReader.cpp
@@ -24,6 +24,15 @@
     const WasmSection &WS = WasmObj.getWasmSection(Sec);
     Obj->Sections.push_back(
         {static_cast<uint8_t>(WS.Type), WS.Name, WS.Content});
+    // Give known sections standard names to allow them to be selected.
+    Section &ReaderSec = Obj->Sections.back();
+    if (ReaderSec.SectionType > WASM_SEC_CUSTOM &&
+        ReaderSec.SectionType <= WASM_SEC_TAG)
+      ReaderSec.Name = sectionTypeToString(ReaderSec.SectionType);
+    // If the section type is CUSTOM, it has a name already. If it's a new type
+    // of section that we don't explicitly handle here, it will have an empty
+    // name and objcopy won't be able to select it by name (e.g. for removal
+    // or dumping) but it will still be valid and able to be copied.
   }
   return std::move(Obj);
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D126509.432572.patch
Type: text/x-patch
Size: 3351 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220527/b0827ab9/attachment.bin>


More information about the llvm-commits mailing list