brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.5 KiB · aa9fff9 Raw
183 lines · plain
1# REQUIRES: x862# RUN: rm -rf %t; split-file %s %t3# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/foo.s -o %t/foo.o4# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o5# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/c-string-literal.s -o %t/c-string-literal.o6# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/baz.s -o %t/baz.o7 8# RUN: llvm-ar --format=darwin crs %t/libfoo.a %t/foo.o9# RUN: %lld -dylib %t/baz.o -o %t/libbaz.dylib10# RUN: %lld -demangle -map %t/map %t/test.o -force_load %t/libfoo.a \11# RUN:   %t/c-string-literal.o %t/libbaz.dylib --time-trace -o %t/test \12# RUN:   --no-deduplicate-strings13# RUN: llvm-objdump --syms --section-headers %t/test > %t/objdump14## Check that symbols in cstring sections aren't emitted15## Also check that we don't have redundant EH_Frame symbols (regression test)16# RUN: cat %t/objdump %t/map | FileCheck %s --implicit-check-not _hello_world \17# RUN:   --implicit-check-not EH_Frame18# RUN: FileCheck %s --check-prefix=MAPFILE < %t/test.time-trace19 20# CHECK:       Sections:21# CHECK-NEXT:  Idx  Name         Size     VMA               Type22# CHECK-NEXT:  0 __text          0000001c [[#%x,TEXT:]]     TEXT23# CHECK-NEXT:  1 __stubs         0000000c [[#%x,STUBS:]]    TEXT24# CHECK-NEXT:  2 __stub_helper   0000001a [[#%x,HELPER:]]   TEXT25# CHECK-NEXT:  3 __cstring       0000002b [[#%x,CSTR:]]     DATA26# CHECK-NEXT:  4 __unwind_info   0000103c [[#%x,UNWIND:]]   DATA27# CHECK-NEXT:  5 __eh_frame      00000038 [[#%x,EH_FRAME:]] DATA28# CHECK-NEXT:  6 __got           00000010 [[#%x,GOT:]]      DATA29# CHECK-NEXT:  7 __la_symbol_ptr 00000010 [[#%x,LAZY:]]     DATA30# CHECK-NEXT:  8 __data          00000008 [[#%x,DATA:]]     DATA31# CHECK-NEXT:  9 __thread_ptrs   00000008 [[#%x,TLVP:]]     DATA32# CHECK-NEXT: 10 __common        00000001 [[#%x,BSS:]]      BSS33 34# CHECK:      SYMBOL TABLE:35# CHECK-DAG:  [[#%x,DYLD:]]    l     O __DATA,__data __dyld_private36# CHECK-DAG:  [[#%x,MAIN:]]    g     F __TEXT,__text _main37# CHECK-DAG:  [[#%x,NUMBER:]]  g     O __DATA,__common _number38# CHECK-DAG:  [[#%x,BAR:]]     w     F __TEXT,__text _bar39# CHECK-DAG:  [[#%x,FOO:]]     g     F __TEXT,__text __ZTIN3foo3bar4MethE40# CHECK-DAG:  [[#%x,HIWORLD:]] g     O __TEXT,__cstring _hello_world41# CHECK-DAG:  [[#%x,HIITSME:]] g     O __TEXT,__cstring _hello_its_me42 43# CHECK:      # Path: {{.*}}{{/|\\}}map-file.s.tmp/test44# CHECK-NEXT: # Arch: x86_6445# CHECK-NEXT: # Object files:46# CHECK-NEXT: [  0] linker synthesized47# CHECK-NEXT: [  1] {{.*}}{{/|\\}}usr/lib{{/|\\}}libSystem.tbd{{$}}48# CHECK-NEXT: [  2] {{.*}}{{/|\\}}map-file.s.tmp/test.o{{$}}49# CHECK-NEXT: [  3] {{.*}}{{/|\\}}map-file.s.tmp/libfoo.a(foo.o){{$}}50# CHECK-NEXT: [  4] {{.*}}{{/|\\}}map-file.s.tmp/c-string-literal.o{{$}}51# CHECK-NEXT: [  5] {{.*}}{{/|\\}}map-file.s.tmp/libbaz.dylib{{$}}52 53# CHECK-NEXT: # Sections:54# CHECK-NEXT: # Address           Size            Segment  Section55# CHECK-NEXT: 0x[[#%X,TEXT]]      0x{{[0-9A-F]+}} __TEXT  __text56# CHECK-NEXT: 0x[[#%X,STUBS]]     0x{{[0-9A-F]+}} __TEXT  __stubs57# CHECK-NEXT: 0x[[#%X,HELPER]]    0x{{[0-9A-F]+}} __TEXT  __stub_helper58# CHECK-NEXT: 0x[[#%X,CSTR]]      0x{{[0-9A-F]+}} __TEXT  __cstring59# CHECK-NEXT: 0x[[#%X,UNWIND]]    0x{{[0-9A-F]+}} __TEXT  __unwind_info60# CHECK-NEXT: 0x[[#%X,EH_FRAME]]  0x{{[0-9A-F]+}} __TEXT  __eh_frame61# CHECK-NEXT: 0x[[#%X,GOT]]       0x{{[0-9A-F]+}} __DATA_CONST  __got62# CHECK-NEXT: 0x[[#%X,LAZY]]      0x{{[0-9A-F]+}} __DATA  __la_symbol_ptr63# CHECK-NEXT: 0x[[#%X,DATA]]      0x{{[0-9A-F]+}} __DATA  __data64# CHECK-NEXT: 0x[[#%X,TLVP]]      0x{{[0-9A-F]+}} __DATA  __thread_ptrs65# CHECK-NEXT: 0x[[#%X,BSS]]       0x{{[0-9A-F]+}} __DATA  __common66 67# CHECK-NEXT: # Symbols:68# CHECK-NEXT: # Address                Size        File   Name69# CHECK-NEXT: 0x[[#%X,MAIN]]           0x00000019  [  2] _main70# CHECK-NEXT: 0x[[#%X,BAR]]            0x00000001  [  2] _bar71# CHECK-NEXT: 0x[[#%X,FOO]]            0x00000001  [  3] __ZTIN3foo3bar4MethE72# CHECK-NEXT: 0x[[#%X,FOO+1]]          0x00000001  [  3] ltmp173# CHECK-NEXT: 0x[[#%X,STUBS]]          0x00000006  [  5] _baz74# CHECK-NEXT: 0x[[#%X,STUBS+6]]        0x00000006  [  2] _bar75# CHECK-NEXT: 0x[[#%X,HELPER]]         0x0000001A  [  0] helper helper76# CHECK-NEXT: 0x[[#%X,HIWORLD]]        0x0000000E  [  4] literal string: Hello world!\n77# CHECK-NEXT: 0x[[#%X,HIITSME]]        0x0000000F  [  4] literal string: Hello, it's me78# CHECK-NEXT: 0x[[#%X,HIITSME+0xf]]    0x0000000E  [  4] literal string: Hello world!\n79# CHECK-NEXT: 0x[[#%X,UNWIND]]         0x0000103C  [  0] compact unwind info80## Note: ld64 prints "CIE" and "FDE for: <function>" instead of "EH_Frame".81# CHECK-NEXT: 0x[[#%X,EH_FRAME]]       0x00000018  [  2] EH_Frame82# CHECK-NEXT: 0x[[#%X,EH_FRAME+0x18]]  0x00000020  [  2] EH_Frame83# CHECK-NEXT: 0x[[#%X,GOT]]            0x00000008  [  0] non-lazy-pointer-to-local: _baz284# CHECK-NEXT: 0x[[#%X,GOT+8]]          0x00000008  [  0] non-lazy-pointer-to-local: dyld_stub_binder85# CHECK-NEXT: 0x[[#%X,LAZY]]           0x00000008  [  5] _baz86# CHECK-NEXT: 0x[[#%X,LAZY+8]]         0x00000008  [  2] _bar87# CHECK-NEXT: 0x[[#%X,DYLD]]           0x00000000  [  0] __dyld_private88# CHECK-NEXT: 0x[[#%X,TLVP]]           0x00000008  [  0] non-lazy-pointer-to-local: _baz_tlv89# CHECK-NEXT: 0x[[#%X,BSS]]            0x00000001  [  2] _number90# CHECK-EMPTY:91 92# MAPFILE: "name":"Total Write map file"93 94# RUN: %lld -demangle -dead_strip -map %t/stripped-map %t/test.o -force_load \95# RUN:   %t/libfoo.a %t/c-string-literal.o %t/libbaz.dylib -o %t/stripped96# RUN: FileCheck --check-prefix=STRIPPED %s < %t/stripped-map97 98# STRIPPED-LABEL: Dead Stripped Symbols:99# STRIPPED-DAG:   <<dead>>  0x00000001  [  2] _number100# STRIPPED-DAG:   <<dead>>  0x00000001  [  3] __ZTIN3foo3bar4MethE101# STRIPPED-DAG:   <<dead>>  0x0000000E  [  4] literal string: Hello world!\n102# STRIPPED-DAG:   <<dead>>  0x0000000F  [  4] literal string: Hello, it's me103# STRIPPED-DAG:   <<dead>>  0x0000000E  [  4] literal string: Hello world!\n104 105# RUN: %lld --icf=all -map %t/icf-map %t/test.o -force_load %t/libfoo.a \106# RUN:   %t/c-string-literal.o %t/libbaz.dylib -o /dev/null107# RUN: FileCheck --check-prefix=ICF %s < %t/icf-map108 109## Verify that folded symbols and cstrings have size zero. Note that ld64 prints110## folded symbols but not folded cstrings; we print both.111 112# ICF:     Symbols:113# ICF-DAG: 0x[[#%X,FOO:]]     0x00000000  [  3] __ZTIN3foo3bar4MethE114# ICF-DAG: 0x[[#FOO]]         0x00000001  [  2] _bar115# ICF-DAG: 0x[[#%X,HIWORLD:]] 0x0000000E  [  4]  literal string: Hello world!\n116# ICF-DAG: 0x[[#%X,HIWORLD]]  0x00000000  [  4]  literal string: Hello world!\n117 118#--- foo.s119.globl __ZTIN3foo3bar4MethE120## This should not appear in the map file since it is a zero-size private label121## symbol.122ltmp0:123## This C++ symbol makes it clear that we do not print the demangled name in124## the map file, even if `-demangle` is passed.125__ZTIN3foo3bar4MethE:126  nop127 128## This private label symbol will appear in the map file since it has nonzero129## size.130ltmp1:131  nop132 133.subsections_via_symbols134 135#--- test.s136.comm _number, 1137.globl _main, _bar138.weak_definition _bar139 140_main:141.cfi_startproc142.cfi_def_cfa_offset 16143  callq _bar144  callq _baz145  movq _baz2@GOTPCREL(%rip), %rax146  mov _baz_tlv@TLVP(%rip), %rax147  ret148.cfi_endproc149 150_bar:151  nop152 153.subsections_via_symbols154 155#--- c-string-literal.s156.globl _hello_world, _hello_its_me157 158.cstring159 160_hello_world:161.asciz "Hello world!\n"162 163_hello_its_me:164.asciz "Hello, it's me"165 166.asciz "Hello world!\n"167 168.subsections_via_symbols169 170#--- baz.s171.globl _baz, _baz2172 173_baz:174  nop175 176_baz2:177  nop178 179.section __DATA,__thread_vars,thread_local_variables180.globl _baz_tlv181_baz_tlv:182  nop183