[llvm] [llvm-objcopy] Add --remove-symbol-prefix (PR #79415)

James Henderson via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 6 00:46:55 PST 2024


================
@@ -0,0 +1,64 @@
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-objcopy --remove-symbol-prefix __pf_ %t %t2
+# RUN: llvm-readelf --symbols %t2 | FileCheck %s
+
+## Show that an empty string is permitted as the argument to
+## --remove-prefix-symbols.
+# RUN: llvm-objcopy --remove-symbol-prefix= %t2 %t3
+# RUN: cmp %t2 %t3
+
+## When both options are present, llvm-objcopy should remove
+## prefixes first, before adding prefixes.
+# RUN: llvm-objcopy --remove-symbol-prefix=AAA --prefix-symbols=AAA %t %t4
+# RUN: llvm-objcopy --prefix-symbols=AAA %t %t5
+# RUN: cmp %t4 %t5
+
+## Show that the last --remove-symbol-prefix option wins.
+# RUN: llvm-objcopy --remove-symbol-prefix=__pf_ --remove-symbol-prefix=__ %t %6
+# RUN: llvm-objcopy --remove-symbol-prefix=__ %t %7
+# RUN: cmp %6 %7
+
+!ELF
+FileHeader:
+  Class:           ELFCLASS64
+  Data:            ELFDATA2LSB
+  Type:            ET_REL
+  Machine:         EM_X86_64
+Sections:
+  - Name:            .text
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    Address:         0x1000
+    AddressAlign:    0x0000000000000010
+    Size:            64
+Symbols:
+  - Name:     __pf_foo
+    Type:     STT_SECTION
+    Section:  .text
+  - Name:     __pf_bar
+    Type:     STT_FILE
+    Section:  .text
+  - Name:     foobar
+    Type:     STT_FUNC
+    Section:  .text
+    Binding:  STB_GLOBAL
+  - Name:     foo__pf_bar1
+    Type:     STT_FUNC
+    Section:  .text
+    Binding:  STB_GLOBAL
+  - Name:     __pf_foo__pf_bar2
+    Type:     STT_FUNC
+    Section:  .text
+    Binding:  STB_GLOBAL
+  - Name:     undef
+    Binding:  STB_GLOBAL
+
+# CHECK:      Symbol table '.symtab' contains [[#]] entries:
+# CHECK-NEXT:  Num: Value Size Type Bind Vis Ndx Name
+# CHECK-NEXT:   0: [[#]] 0 NOTYPE  LOCAL  {{.*}}
+# CHECK-NEXT:   1: [[#]] 0 SECTION LOCAL  {{.*}} __pf_foo
+# CHECK-NEXT:   2: [[#]] 0 FILE    LOCAL  {{.*}} bar
+# CHECK-NEXT:   3: [[#]] 0 FUNC    GLOBAL {{.*}} foobar
+# CHECK-NEXT:   4: [[#]] 0 FUNC    GLOBAL {{.*}} foo__pf_bar1
+# CHECK-NEXT:   5: [[#]] 0 FUNC    GLOBAL {{.*}} foo__pf_bar2
+# CHECK-NEXT:   6: [[#]] 0 NOTYPE  GLOBAL {{.*}} undef
----------------
jh7370 wrote:

I think you can just get away with checking the symbol names here, and don't need to check the other columns (which as an aside, feel somewhat arbitrary in how you've checked them, e.g. why `[[#]]` for Value, but explicitly 0 for Size?).
```suggestion
# CHECK-NEXT: Name
# CHECK-NEXT: {{ $}}
# CHECK-NEXT: __pf_foo
# CHECK-NEXT: bar
# CHECK-NEXT: foobar
# CHECK-NEXT: foo__pf_bar1
# CHECK-NEXT: foo__pf_bar2
# CHECK-NEXT: undef
```

https://github.com/llvm/llvm-project/pull/79415


More information about the llvm-commits mailing list