brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · 950de32 Raw
133 lines · plain
1# REQUIRES: x862# RUN: rm -rf %t; split-file %s %t3 4## With -flat_namespace, non-weak extern symbols in dylibs become interposable.5## Check that we generate the correct bindings for them. The test also includes6## other symbol types like weak externs to verify we continue to do the same7## (correct) thing even when `-flat_namespace` is enabled, instead of generating8## spurious bindings.9 10# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o %t/foo.o %t/foo.s11# RUN: %lld -lSystem -flat_namespace -o %t/foo %t/foo.o12# RUN: %lld -lSystem -flat_namespace -fixup_chains -o %t/chained %t/foo.o13# RUN: %lld -lSystem -dylib -flat_namespace -o %t/foo.dylib %t/foo.o14# RUN: %lld -lSystem -dylib -flat_namespace -fixup_chains -o %t/chained.dylib %t/foo.o15# RUN: %lld -lSystem -bundle -flat_namespace -o %t/foo.bundle %t/foo.o16# RUN: %lld -lSystem -bundle -flat_namespace -fixup_chains -o %t/chained.bundle %t/foo.o17# RUN: llvm-objdump --macho --syms --rebase --bind --lazy-bind --weak-bind %t/foo | \18# RUN:   FileCheck %s --check-prefixes=SYMS,EXEC --implicit-check-not=_private_extern19# RUN: llvm-objdump --macho --syms %t/chained >> %t/chained.objdump20# RUN: llvm-objdump --macho --dyld-info %t/chained >> %t/chained.objdump21# RUN: FileCheck %s --check-prefixes=SYMS,CHAINED-EXEC < %t/chained.objdump22# RUN: llvm-objdump --macho --syms %t/chained.dylib >> %t/dylib.objdump23# RUN: llvm-objdump --macho --dyld-info %t/chained.dylib >> %t/dylib.objdump24# RUN: FileCheck %s --check-prefixes=SYMS,CHAINED-DYLIB < %t/dylib.objdump25# RUN: llvm-objdump --macho --syms %t/chained.bundle >> %t/bundle.objdump26# RUN: llvm-objdump --macho --dyld-info %t/chained.bundle >> %t/bundle.objdump27# RUN: FileCheck %s --check-prefixes=SYMS,CHAINED-DYLIB < %t/bundle.objdump28 29# SYMS: SYMBOL TABLE:30# SYMS-DAG: [[#%x, EXTERN_REF:]] l     O __DATA,__data _extern_ref31# SYMS-DAG: [[#%x, LOCAL_REF:]]  l     O __DATA,__data _local_ref32# SYMS-DAG: [[#%x, WEAK_REF:]]   l     O __DATA,__data _weak_ref33# SYMS-DAG: [[#%x, TLV_REF:]]    g     O __DATA,__thread_vars _tlv34 35## Executables with -flat_namespace don't have interposable externs.36# EXEC:       Rebase table:37# EXEC-NEXT:  segment  section          address                  type38# EXEC-DAG:   __DATA   __la_symbol_ptr  0x[[#%X, WEAK_LAZY:]]    pointer39# EXEC-DAG:   __DATA   __data           0x[[#%.8X, EXTERN_REF]]  pointer40# EXEC-DAG:   __DATA   __data           0x[[#%.8X, LOCAL_REF]]   pointer41# EXEC-DAG:   __DATA   __data           0x[[#%.8X, WEAK_REF]]    pointer42# EXEC-EMPTY:43# EXEC-NEXT:  Bind table:44# EXEC-NEXT:  segment  section          address  type     addend dylib   symbol45# EXEC-EMPTY:46# EXEC-NEXT:  Lazy bind table:47# EXEC-NEXT:  segment  section          address  dylib    symbol48# EXEC-EMPTY:49# EXEC-NEXT:  Weak bind table:50# EXEC-NEXT:  segment  section          address                type     addend   symbol51# EXEC-NEXT:  __DATA   __la_symbol_ptr  0x[[#%.8X, WEAK_LAZY]] pointer       0   _weak_extern52# EXEC-NEXT:  __DATA   __data           0x[[#%.8X, WEAK_REF]]  pointer       0   _weak_extern53# EXEC-EMPTY:54 55# CHAINED-EXEC:      dyld information:56# CHAINED-EXEC-NEXT: segment      section  address               pointer type   addend dylib  symbol/vm address57# CHAINED-EXEC-DAG:  __DATA_CONST __got    {{.*}}                {{.*}}  bind   0x0    weak   _weak_extern58# CHAINED-EXEC-DAG: __DATA       __data    0x[[#%x, EXTERN_REF]] {{.*}}  rebase               {{.*}}59# CHAINED-EXEC-DAG: __DATA       __data    0x[[#%x, WEAK_REF]]   {{.*}}  bind   0x0    weak   _weak_extern60# CHAINED-EXEC-DAG: __DATA       __data    0x[[#%x, LOCAL_REF]]  {{.*}}  rebase               {{.*}}61# CHAINED-EXEC-EMPTY:62 63# DYLIB:       Rebase table:64# DYLIB-NEXT:  segment      section          address                  type65# DYLIB-DAG:   __DATA       __la_symbol_ptr  0x[[#%X, WEAK_LAZY:]]    pointer66# DYLIB-DAG:   __DATA       __la_symbol_ptr  0x[[#%X, EXTERN_LAZY:]]  pointer67# DYLIB-DAG:   __DATA       __data           0x[[#%.8X, EXTERN_REF]]  pointer68# DYLIB-DAG:   __DATA       __data           0x[[#%.8X, LOCAL_REF]]   pointer69# DYLIB-DAG:   __DATA       __data           0x[[#%.8X, WEAK_REF]]    pointer70# DYLIB-DAG:   __DATA       __thread_ptrs    0x[[#%.8X, TLV_REF]]     pointer71# DYLIB-EMPTY:72# DYLIB-NEXT:  Bind table:73# DYLIB-NEXT:  segment      section        address                 type     addend dylib            symbol74# DYLIB-DAG:   __DATA_CONST __got          {{.*}}                  pointer       0 flat-namespace   dyld_stub_binder75# DYLIB-DAG:   __DATA       __data         0x[[#%.8X, EXTERN_REF]] pointer       0 flat-namespace   _extern76# DYLIB-DAG:   __DATA       __thread_ptrs  0x[[#%.8X, TLV_REF]]    pointer       0 flat-namespace   _tlv77# DYLIB-EMPTY:78# DYLIB-NEXT:  Lazy bind table:79# DYLIB-NEXT:  segment  section            address                  dylib           symbol80# DYLIB-NEXT:  __DATA   __la_symbol_ptr    0x[[#%.8X, EXTERN_LAZY]] flat-namespace   _extern81# DYLIB-EMPTY:82# DYLIB-NEXT:  Weak bind table:83# DYLIB-NEXT:  segment  section            address                  type    addend   symbol84# DYLIB-NEXT:  __DATA   __la_symbol_ptr    0x[[#%.8X, WEAK_LAZY]]   pointer      0   _weak_extern85# DYLIB-NEXT:  __DATA   __data             0x[[#%.8X, WEAK_REF]]    pointer      0   _weak_extern86# DYLIB-EMPTY:87 88# CHAINED-DYLIB: dyld information:89# CHAINED-DYLIB-NEXT: segment      section      address               pointer type  addend dylib           symbol/vm address90# CHAINED-DYLIB-DAG: __DATA_CONST __got         {{.*}}                {{.*}}  bind  0x0    weak            _weak_extern91# CHAINED-DYLIB-DAG: __DATA_CONST __got         {{.*}}                {{.*}}  bind  0x0    flat-namespace  _extern92# CHAINED-DYLIB-DAG: __DATA       __data        0x[[#%x, EXTERN_REF]] {{.*}}  bind  0x0    flat-namespace  _extern93# CHAINED-DYLIB-DAG: __DATA       __data        0x[[#%x, WEAK_REF]]   {{.*}}  bind  0x0    weak            _weak_extern94# CHAINED-DYLIB-DAG: __DATA       __data        0x[[#%x, LOCAL_REF]]  {{.*}}  rebase                       {{.*}}95# CHAINED-DYLIB-DAG: __DATA       __thread_ptrs 0x[[#%x, TLV_REF]]    {{.*}}  bind  0x0    flat-namespace  _tlv96# CHAINED-DYLIB-EMPTY:97 98#--- foo.s99 100.globl _main, _extern, _weak_extern, _tlv101.weak_definition _weak_extern102.private_extern _private_extern103 104_extern:105  retq106_weak_extern:107  retq108_private_extern:109  retq110_local:111  retq112 113_main:114  callq _extern115  callq _weak_extern116  callq _private_extern117  callq _local118  mov _tlv@TLVP(%rip), %rax119  retq120 121.data122_extern_ref:123.quad _extern124_weak_ref:125.quad _weak_extern126_local_ref:127.quad _local128 129.section __DATA,__thread_vars,thread_local_variables130_tlv:131 132.subsections_via_symbols133