brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.2 KiB · 682aa8d Raw
172 lines · plain
1# REQUIRES: x862# RUN: rm -rf %t; split-file %s %t3# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o4# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/libfoo.s -o %t/libfoo.o5# RUN: %lld -dylib %t/libfoo.o -o %t/libfoo.dylib6# RUN: %lld %t/test.o -L%t -lfoo -o %t/test -lSystem7# RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn --rebase --bind --lazy-bind --weak-bind \8# RUN:     --full-contents %t/test | FileCheck --check-prefixes=COMMON,CHECK %s9 10# RUN: %lld -fixup_chains %t/test.o -L%t -lfoo -o %t/chained -lSystem11# RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn --syms --full-contents %t/chained > %t/chained.objdump12# RUN: llvm-objdump --no-print-imm-hex --macho --dyld-info %t/chained >> %t/chained.objdump13# RUN: FileCheck %s --check-prefixes=COMMON,CHAINED < %t/chained.objdump14 15# CHAINED: SYMBOL TABLE:16# CHAINED: [[#%x,WEAK_INT:]] l     F __TEXT,__text _weak_internal{{$}}17 18# COMMON:      Contents of section __DATA_CONST,__got:19## Check that this section contains a nonzero pointer. It should point to20## _weak_external_for_gotpcrel.21# COMMON-NEXT: {{[0-9a-f]+}} {{[0-9a-f ]*[1-9a-f]+[0-9a-f ]*}}22 23# CHECK:      Contents of section __DATA,__la_symbol_ptr:24## Check that this section contains a nonzero pointer. It should point to25## _weak_external_fn, but we don't have a good way of testing the exact value as26## the bytes here are in little-endian order.27# CHECK-NEXT: {{[0-9a-f]+}} {{[0-9a-f ]*[1-9a-f]+[0-9a-f ]*}}28 29# COMMON-LABEL:      <_main>:30# COMMON-NEXT: movq  [[#]](%rip), %rax  ## 0x[[#%X,WEAK_DY_GOT_ADDR:]]31# COMMON-NEXT: movq  [[#]](%rip), %rax  ## 0x[[#%X,WEAK_EXT_GOT_ADDR:]]32# COMMON-NEXT: leaq  [[#]](%rip), %rax  ## 0x[[#%X,WEAK_INT_GOT_ADDR:]]33# COMMON-NEXT: movq  [[#]](%rip), %rax  ## 0x[[#%X,WEAK_TLV_ADDR:]]34# COMMON-NEXT: movq  [[#]](%rip), %rax  ## 0x[[#%X,WEAK_DY_TLV_ADDR:]]35# COMMON-NEXT: leaq  [[#]](%rip), %rax  ## 0x[[#%X,WEAK_INT_TLV_ADDR:]]36# COMMON-NEXT: callq 0x{{[0-9a-f]*}}37# COMMON-NEXT: callq 0x{{[0-9a-f]*}}38# COMMON-NEXT: callq 0x{{[0-9a-f]*}}39 40# CHECK-LABEL: Rebase table:41# CHECK:       __DATA        __la_symbol_ptr 0x[[#%x,WEAK_EXT_FN:]]  pointer42 43# CHECK-LABEL: Bind table:44# CHECK-DAG:   __DATA_CONST  __got           0x[[#WEAK_DY_GOT_ADDR]] pointer 0 libfoo    _weak_dysym_for_gotpcrel45# CHECK-DAG:   __DATA        __la_symbol_ptr 0x[[#%x,WEAK_DY_FN:]]   pointer 0 libfoo    _weak_dysym_fn46# CHECK-DAG:   __DATA        __data          0x[[#%x,WEAK_DY:]]      pointer 0 libfoo    _weak_dysym47# CHECK-DAG:   __DATA        __thread_vars   0x{{[0-9a-f]*}}         pointer 0 libSystem __tlv_bootstrap48# CHECK-DAG:   __DATA        __thread_vars   0x{{[0-9a-f]*}}         pointer 0 libSystem __tlv_bootstrap49# CHECK-DAG:   __DATA        __thread_ptrs   0x[[#WEAK_DY_TLV_ADDR]] pointer 0 libfoo    _weak_dysym_tlv50## Check that we don't have any other bindings51# CHECK-EMPTY:52 53# CHECK-LABEL: Lazy bind table:54# CHECK-NEXT:  segment section address dylib symbol55## Verify that we have no lazy bindings56# CHECK-EMPTY:57 58# CHECK-LABEL: Weak bind table:59# CHECK-DAG:   __DATA_CONST __got           0x[[#WEAK_DY_GOT_ADDR]]   pointer 0 _weak_dysym_for_gotpcrel60# CHECK-DAG:   __DATA_CONST __got           0x[[#WEAK_EXT_GOT_ADDR]]  pointer 0 _weak_external_for_gotpcrel61# CHECK-DAG:   __DATA       __data          0x[[#WEAK_DY]]            pointer 0 _weak_dysym62# CHECK-DAG:   __DATA       __thread_ptrs   0x[[#WEAK_TLV_ADDR]]      pointer 0 _weak_tlv63# CHECK-DAG:   __DATA       __thread_ptrs   0x[[#WEAK_DY_TLV_ADDR]]   pointer 0 _weak_dysym_tlv64# CHECK-DAG:   __DATA       __data          0x{{[0-9a-f]*}}           pointer 2 _weak_external65# CHECK-DAG:   __DATA       __la_symbol_ptr 0x[[#WEAK_DY_FN]]         pointer 0 _weak_dysym_fn66# CHECK-DAG:   __DATA       __la_symbol_ptr 0x[[#WEAK_EXT_FN]]        pointer 0 _weak_external_fn67## Check that we don't have any other bindings68# CHECK-EMPTY:69 70## Weak internal symbols don't get bindings71# RUN: llvm-objdump --macho --bind --lazy-bind --weak-bind %t/test | FileCheck %s --check-prefix=WEAK-INTERNAL72# WEAK-INTERNAL-NOT: _weak_internal73# WEAK-INTERNAL-NOT: _weak_internal_fn74# WEAK-INTERNAL-NOT: _weak_internal_tlv75 76# CHAINED-LABEL: dyld information:77# CHAINED-NEXT:  segment      section       address                  pointer type  addend dylib      symbol/vm address78# CHAINED-DAG:   __DATA_CONST __got         0x{{[0-9a-f]*}}          {{.*}}  bind  0x0    weak       _weak_external_fn79# CHAINED-DAG:   __DATA_CONST __got         0x{{[0-9a-f]*}}          {{.*}}  bind  0x0    weak       _weak_dysym_fn80# CHAINED-DAG:   __DATA_CONST __got         0x[[#WEAK_EXT_GOT_ADDR]] {{.*}}  bind  0x0    weak       _weak_external_for_gotpcrel81# CHAINED-DAG:   __DATA_CONST __got         0x[[#WEAK_DY_GOT_ADDR]]  {{.*}}  bind  0x0    weak       _weak_dysym_for_gotpcrel82# CHAINED-DAG:   __DATA       __data        0x{{[0-9a-f]*}}          {{.*}}  bind  0x0    weak       _weak_dysym83# CHAINED-DAG:   __DATA       __data        0x{{[0-9a-f]*}}          {{.*}}  bind  0x2    weak       _weak_external84# CHAINED-DAG:   __DATA       __data        0x{{[0-9a-f]*}}          {{.*}}  rebase                  0x[[#%X,WEAK_INT]]85# CHAINED-DAG:   __DATA       __thread_vars 0x{{[0-9a-f]*}}          {{.*}}  bind  0x0    libSystem  __tlv_bootstrap86# CHAINED-DAG:   __DATA       __thread_vars 0x{{[0-9a-f]*}}          {{.*}}  bind  0x0    libSystem  __tlv_bootstrap87# CHAINED-DAG:   __DATA       __thread_ptrs 0x[[#WEAK_DY_TLV_ADDR]]  {{.*}}  bind  0x0    weak       _weak_dysym_tlv88# CHAINED-DAG:   __DATA       __thread_ptrs 0x[[#WEAK_TLV_ADDR]]     {{.*}}  bind  0x0    weak       _weak_tlv89# CHAINED-EMPTY:90 91#--- libfoo.s92 93.globl _weak_dysym94.weak_definition _weak_dysym95_weak_dysym:96  .quad 0x123497 98.globl _weak_dysym_for_gotpcrel99.weak_definition _weak_dysym_for_gotpcrel100_weak_dysym_for_gotpcrel:101  .quad 0x1234102 103.globl _weak_dysym_fn104.weak_definition _weak_dysym_fn105_weak_dysym_fn:106  ret107 108.section __DATA,__thread_vars,thread_local_variables109 110.globl _weak_dysym_tlv111.weak_definition _weak_dysym_tlv112_weak_dysym_tlv:113  .quad 0x1234114 115#--- test.s116 117.globl _main, _weak_external, _weak_external_for_gotpcrel, _weak_external_fn118.weak_definition _weak_external, _weak_external_for_gotpcrel, _weak_external_fn, _weak_internal, _weak_internal_for_gotpcrel, _weak_internal_fn119 120_main:121  mov _weak_dysym_for_gotpcrel@GOTPCREL(%rip), %rax122  mov _weak_external_for_gotpcrel@GOTPCREL(%rip), %rax123  mov _weak_internal_for_gotpcrel@GOTPCREL(%rip), %rax124  mov _weak_tlv@TLVP(%rip), %rax125  mov _weak_dysym_tlv@TLVP(%rip), %rax126  mov _weak_internal_tlv@TLVP(%rip), %rax127  callq _weak_dysym_fn128  callq _weak_external_fn129  callq _weak_internal_fn130  mov $0, %rax131  ret132 133_weak_external:134  .quad 0x1234135 136_weak_external_for_gotpcrel:137  .quad 0x1234138 139_weak_external_fn:140  ret141 142_weak_internal:143  .quad 0x1234144 145_weak_internal_for_gotpcrel:146  .quad 0x1234147 148_weak_internal_fn:149  ret150 151.data152  .quad _weak_dysym153  .quad _weak_external + 2154  .quad _weak_internal155 156.tbss _weak_tlv$tlv$init, 4, 2157.tbss _weak_internal_tlv$tlv$init, 4, 2158 159.section __DATA,__thread_vars,thread_local_variables160.globl _weak_tlv161.weak_definition  _weak_tlv, _weak_internal_tlv162 163_weak_tlv:164  .quad __tlv_bootstrap165  .quad 0166  .quad _weak_tlv$tlv$init167 168_weak_internal_tlv:169  .quad __tlv_bootstrap170  .quad 0171  .quad _weak_internal_tlv$tlv$init172