79 lines · plain
1# REQUIRES: x862# RUN: rm -rf %t; split-file %s %t3# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/libfoo.s -o %t/libfoo.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/bar.s -o %t/bar.o6# RUN: %lld -dylib %t/libfoo.o -o %t/libfoo.dylib -lSystem7# RUN: %lld %t/test.o %t/bar.o %t/libfoo.dylib -o %t/test -lSystem8# RUN: llvm-objdump --macho -d --no-show-raw-insn --indirect-symbols %t/test | FileCheck %s9# RUN: llvm-otool -l %t/test | FileCheck --check-prefix=DYSYMTAB %s10 11# CHECK: (__TEXT,__text) section12# CHECK-NEXT: _main:13# CHECK-NEXT: movq {{.*}}(%rip), %rax ## literal pool symbol address: _foo14# CHECK-NEXT: movq {{.*}}(%rip), %rax ## literal pool symbol address: _bar15# CHECK-NEXT: leaq _baz(%rip), %rax16# CHECK-NEXT: addq {{.*}}(%rip), %rax17# CHECK-NEXT: movq {{.*}}(%rip), %rax ## literal pool symbol address: _foo_tlv18# CHECK-NEXT: movq {{.*}}(%rip), %rax ## literal pool symbol address: _bar_tlv19# CHECK-NEXT: callq {{.*}} ## symbol stub for: _foo_fn20# CHECK-NEXT: callq {{.*}} ## symbol stub for: _bar_fn21# CHECK-NEXT: retq22 23# CHECK: Indirect symbols for (__TEXT,__stubs) 2 entries24# CHECK-NEXT: address index name25# CHECK-NEXT: _bar_fn26# CHECK-NEXT: _foo_fn27# CHECK-NEXT: Indirect symbols for (__DATA_CONST,__got) 4 entries28# CHECK-NEXT: address index name29# CHECK-NEXT: LOCAL30# CHECK-NEXT: _bar31# CHECK-NEXT: _foo32# CHECK-NEXT: _stub_binder33# CHECK-NEXT: Indirect symbols for (__DATA,__la_symbol_ptr) 2 entries34# CHECK-NEXT: address index name35# CHECK-NEXT: _bar_fn36# CHECK-NEXT: _foo_fn37# CHECK-NEXT: Indirect symbols for (__DATA,__thread_ptrs) 2 entries38# CHECK-NEXT: address index name39# CHECK-NEXT: _bar_tlv40# CHECK-NEXT: _foo_tlv41 42# DYSYMTAB: nindirectsyms 1043 44#--- libfoo.s45 46.globl _foo, _foo_fn, _bar, _bar_fn47_foo:48_foo_fn:49_bar:50_bar_fn:51 52.section __DATA,__thread_vars,thread_local_variables53.globl _foo_tlv, _bar_tlv54_foo_tlv:55_bar_tlv:56 57#--- test.s58 59.globl _main60_main:61 movq _foo@GOTPCREL(%rip), %rax62 movq _bar@GOTPCREL(%rip), %rax63 movq _baz@GOTPCREL(%rip), %rax64 addq _quux@GOTPCREL(%rip), %rax65 mov _foo_tlv@TLVP(%rip), %rax66 mov _bar_tlv@TLVP(%rip), %rax67 callq _foo_fn68 callq _bar_fn69 ret70 71#--- bar.s72.data73.globl _baz,_quux74.private_extern _baz,_quux75_baz:76.asciz "baz"77_quux:78.asciz "quux"79