[lld] 6bf7d2d - [lld/mac] Reland: Add tests for the interaction between -rename_section and -rename_segment

Nico Weber via llvm-commits llvm-commits at lists.llvm.org
Sun Jul 25 15:16:46 PDT 2021


Author: Nico Weber
Date: 2021-07-25T18:16:33-04:00
New Revision: 6bf7d2d9c92e4f5834556532b3a22f6a878eb8de

URL: https://github.com/llvm/llvm-project/commit/6bf7d2d9c92e4f5834556532b3a22f6a878eb8de
DIFF: https://github.com/llvm/llvm-project/commit/6bf7d2d9c92e4f5834556532b3a22f6a878eb8de.diff

LOG: [lld/mac] Reland: Add tests for the interaction between -rename_section and -rename_segment

No behavior change.

Differential Revision: https://reviews.llvm.org/D106765

Added: 
    

Modified: 
    lld/test/MachO/rename.s

Removed: 
    


################################################################################
diff  --git a/lld/test/MachO/rename.s b/lld/test/MachO/rename.s
index 58144f05df79b..7ce82048a8544 100644
--- a/lld/test/MachO/rename.s
+++ b/lld/test/MachO/rename.s
@@ -1,9 +1,11 @@
 # REQUIRES: x86
-# RUN: rm -fr %t
-# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t.o
-# RUN: %lld -o %t %t.o
 
-## Check option format
+# RUN: rm -rf %t; split-file %s %t
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/main.s -o %t.o
+# RUN: %lld -o %t.out %t.o
+
+## Check option format.
 # RUN: not %lld \
 # RUN:     -rename_section B at GUS_SEG b at gus_sect S/ASHY_SEG st*rry_sect \
 # RUN:     -rename_section __FROM_SECT __from_sect __TO_SECT \
@@ -26,13 +28,13 @@
 # BAD2-DAG: error: invalid name for segment or section: -o
 # BAD2-DAG: error: {{.*}}: unhandled file type
 
-## Check that section and segment renames happen
-# RUN: %lld \
+## Check that section and segment renames happen.
+# RUN: %lld -lSystem \
 # RUN:     -rename_section __FROM_SECT __from_sect __TO_SECT __to_sect \
 # RUN:     -rename_segment __FROM_SEG __TO_SEG \
 # RUN:     -rename_section __TEXT __cstring __RODATA __cstring \
-# RUN:   -o %t %t.o
-# RUN: llvm-objdump --macho --all-headers %t | FileCheck %s
+# RUN:   -o %t.out %t.o
+# RN: llvm-otool -l %t.out | FileCheck %s
 
 # CHECK:      {{^}}Section{{$}}
 # CHECK-NEXT: sectname __text
@@ -47,6 +49,63 @@
 # CHECK-NEXT: sectname __cstring
 # CHECK-NEXT: segname __RODATA
 
+## Check interaction between -rename_section and -rename_segment.
+## rename_segment should be applied after rename_section, so the output
+## name of rename_section is renamed by rename_segment.
+## (ld64 leaves an empty __TO_SECT,__to_sect in the output for the intermediate
+## name, but it too writes the actual data to __SEG,__to_sect.)
+# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/small.s \
+# RUN:     -o %t/small.o
+# RUN: %lld -dylib \
+# RUN:     -rename_section __FROM_SECT __from_sect __TO_SECT __to_sect \
+# RUN:     -rename_segment __TO_SECT __SEG \
+# RUN:   -o %t.dylib %t/small.o
+# RUN: llvm-otool -l %t.dylib | FileCheck --check-prefix=SECTSEGYES %s
+# RUN: %lld -dylib \
+# RUN:     -rename_segment __TO_SECT __SEG \
+# RUN:     -rename_section __FROM_SECT __from_sect __TO_SECT __to_sect \
+# RUN:   -o %t.dylib %t/small.o
+# RUN: llvm-otool -l %t.dylib | FileCheck --check-prefix=SECTSEGYES %s
+# SECTSEGYES:      Section
+# SECTSEGYES-NEXT:   sectname __text
+# SECTSEGYES-NEXT:    segname __TEXT
+# SECTSEGYES:      Section
+# SECTSEGYES-NEXT:   sectname __to_sect
+# SECTSEGYES-NEXT:    segname __TO_SECT
+## FIXME: ^ This should use __SEG like ld64 does.
+## ...but rename_segment has no effect if it doesn't match the name after
+## rename_section is applied.
+# RUN: %lld -dylib \
+# RUN:     -rename_section __FROM_SECT __from_sect __TO_SECT __to_sect \
+# RUN:     -rename_segment __FROM_SECT __SEG \
+# RUN:   -o %t.dylib %t/small.o
+# RUN: llvm-otool -l %t.dylib | FileCheck --check-prefix=SECTSEGSOME %s
+# SECTSEGSOME:      Section
+# SECTSEGSOME-NEXT:   sectname __text
+# SECTSEGSOME-NEXT:    segname __TEXT
+# SECTSEGSOME:      Section
+# SECTSEGSOME-NEXT:   sectname __to_sect
+# SECTSEGSOME-NEXT:    segname __TO_SECT
+## If rename_section would only match after rename_segment, rename_section has
+## no effect.
+# RUN: %lld -dylib \
+# RUN:     -rename_section __SEG __from_sect __TO_SECT __to_sect \
+# RUN:     -rename_segment __FROM_SECT __SEG \
+# RUN:   -o %t.dylib %t/small.o
+# RUN: llvm-otool -l %t.dylib | FileCheck --check-prefix=SECTSEGNO %s
+# RUN: %lld -dylib \
+# RUN:     -rename_segment __FROM_SECT __SEG \
+# RUN:     -rename_section __SEG __from_sect __TO_SECT __to_sect \
+# RUN:   -o %t.dylib %t/small.o
+# RUN: llvm-otool -l %t.dylib | FileCheck --check-prefix=SECTSEGNO %s
+# SECTSEGNO:      Section
+# SECTSEGNO-NEXT:   sectname __text
+# SECTSEGNO-NEXT:    segname __TEXT
+# SECTSEGNO:      Section
+# SECTSEGNO-NEXT:   sectname __from_sect
+# SECTSEGNO-NEXT:    segname __SEG
+
+#--- main.s
 .section __FROM_SECT,__from_sect
 .global _from_sect
 _from_sect:
@@ -65,3 +124,9 @@ _from_seg:
 .global _main
 _main:
   ret
+
+#--- small.s
+.section __FROM_SECT,__from_sect
+.global _from_sect
+_from_sect:
+  .space 8


        


More information about the llvm-commits mailing list