132 lines · plain
1# REQUIRES: x862 3# RUN: rm -rf %t; split-file %s %t4 5# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/main.s -o %t.o6# RUN: %lld -o %t.out %t.o7 8## Check option format.9# RUN: not %lld \10# RUN: -rename_section B@GUS_SEG b@gus_sect S/ASHY_SEG st*rry_sect \11# RUN: -rename_section __FROM_SECT __from_sect __TO_SECT \12# RUN: -o /dev/null %t.o 2>&1 | FileCheck %s --check-prefix=BAD113 14# BAD1-DAG: error: invalid name for segment or section: B@GUS_SEG15# BAD1-DAG: error: invalid name for segment or section: b@gus_sect16# BAD1-DAG: error: invalid name for segment or section: S/ASHY_SEG17# BAD1-DAG: error: invalid name for segment or section: st*rry_sect18# BAD1-DAG: error: invalid name for segment or section: -o19# BAD1-DAG: error: {{.*}}: unhandled file type20 21# RUN: not %lld \22# RUN: -rename_segment H#SHY_SEG PL+SSY_SEG \23# RUN: -rename_segment __FROM_SEG \24# RUN: -o /dev/null %t.o 2>&1 | FileCheck %s --check-prefix=BAD225 26# BAD2-DAG: error: invalid name for segment or section: H#SHY_SEG27# BAD2-DAG: error: invalid name for segment or section: PL+SSY_SEG28# BAD2-DAG: error: invalid name for segment or section: -o29# BAD2-DAG: error: {{.*}}: unhandled file type30 31## Check that section and segment renames happen.32# RUN: %lld -lSystem \33# RUN: -rename_section __FROM_SECT __from_sect __TO_SECT __to_sect \34# RUN: -rename_segment __FROM_SEG __TO_SEG \35# RUN: -rename_section __TEXT __cstring __RODATA __cstring \36# RUN: -o %t.out %t.o37# RUN: llvm-otool -l %t.out | FileCheck %s38 39# CHECK: {{^}}Section{{$}}40# CHECK-NEXT: sectname __text41# CHECK-NEXT: segname __TEXT42# CHECK: {{^}}Section{{$}}43# CHECK-NEXT: sectname __to_sect44# CHECK-NEXT: segname __TO_SECT45# CHECK: {{^}}Section{{$}}46# CHECK-NEXT: sectname __from_seg47# CHECK-NEXT: segname __TO_SEG48# CHECK: {{^}}Section{{$}}49# CHECK-NEXT: sectname __cstring50# CHECK-NEXT: segname __RODATA51 52## Check interaction between -rename_section and -rename_segment.53## rename_segment should be applied after rename_section, so the output54## name of rename_section is renamed by rename_segment.55## (ld64 leaves an empty __TO_SECT,__to_sect in the output for the intermediate56## name, but it too writes the actual data to __SEG,__to_sect.)57# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/small.s \58# RUN: -o %t/small.o59# RUN: %lld -dylib \60# RUN: -rename_section __FROM_SECT __from_sect __TO_SECT __to_sect \61# RUN: -rename_segment __TO_SECT __SEG \62# RUN: -o %t.dylib %t/small.o63# RUN: llvm-otool -l %t.dylib | FileCheck --check-prefix=SECTSEGYES %s64# RUN: %lld -dylib \65# RUN: -rename_segment __TO_SECT __SEG \66# RUN: -rename_section __FROM_SECT __from_sect __TO_SECT __to_sect \67# RUN: -o %t.dylib %t/small.o68# RUN: llvm-otool -l %t.dylib | FileCheck --check-prefix=SECTSEGYES %s69# SECTSEGYES: Section70# SECTSEGYES-NEXT: sectname __text71# SECTSEGYES-NEXT: segname __TEXT72# SECTSEGYES: Section73# SECTSEGYES-NEXT: sectname __to_sect74# SECTSEGYES-NEXT: segname __SEG75## ...but rename_segment has no effect if it doesn't match the name after76## rename_section is applied.77# RUN: %lld -dylib \78# RUN: -rename_section __FROM_SECT __from_sect __TO_SECT __to_sect \79# RUN: -rename_segment __FROM_SECT __SEG \80# RUN: -o %t.dylib %t/small.o81# RUN: llvm-otool -l %t.dylib | FileCheck --check-prefix=SECTSEGSOME %s82# SECTSEGSOME: Section83# SECTSEGSOME-NEXT: sectname __text84# SECTSEGSOME-NEXT: segname __TEXT85# SECTSEGSOME: Section86# SECTSEGSOME-NEXT: sectname __to_sect87# SECTSEGSOME-NEXT: segname __TO_SECT88## If rename_section would only match after rename_segment, rename_section has89## no effect.90# RUN: %lld -dylib \91# RUN: -rename_section __SEG __from_sect __TO_SECT __to_sect \92# RUN: -rename_segment __FROM_SECT __SEG \93# RUN: -o %t.dylib %t/small.o94# RUN: llvm-otool -l %t.dylib | FileCheck --check-prefix=SECTSEGNO %s95# RUN: %lld -dylib \96# RUN: -rename_segment __FROM_SECT __SEG \97# RUN: -rename_section __SEG __from_sect __TO_SECT __to_sect \98# RUN: -o %t.dylib %t/small.o99# RUN: llvm-otool -l %t.dylib | FileCheck --check-prefix=SECTSEGNO %s100# SECTSEGNO: Section101# SECTSEGNO-NEXT: sectname __text102# SECTSEGNO-NEXT: segname __TEXT103# SECTSEGNO: Section104# SECTSEGNO-NEXT: sectname __from_sect105# SECTSEGNO-NEXT: segname __SEG106 107#--- main.s108.section __FROM_SECT,__from_sect109.global _from_sect110_from_sect:111 .space 8112 113.section __FROM_SEG,__from_seg114.global _from_seg115_from_seg:116 .space 8117 118## This is a synthetic section; make sure it gets renamed too.119.cstring120 .space 8121 122.text123.global _main124_main:125 ret126 127#--- small.s128.section __FROM_SECT,__from_sect129.global _from_sect130_from_sect:131 .space 8132