Mercurial > hg > CbC > CbC_llvm
view lld/test/MachO/flat-namespace.s @ 213:25ca0248ac32
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 11 Jul 2021 17:05:31 +0900 |
parents | 2e18cbf3894f |
children |
line wrap: on
line source
# REQUIRES: x86 # RUN: rm -rf %t; split-file %s %t # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o %t/foo.o %t/foo.s # RUN: %lld -dylib -o %t/foo.dylib %t/foo.o # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o %t/bar.o %t/bar.s # RUN: %lld -lSystem -dylib -o %t/bar.dylib %t/bar.o %t/foo.dylib # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o %t/baz.o %t/baz.s # RUN: %lld -lSystem -dylib -o %t/baz.dylib %t/baz.o %t/bar.dylib # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o %t/main.o %t/main.s ## With flat_namespace, the linker automatically looks in foo.dylib and ## bar.dylib too, but it doesn't add a LC_LOAD_DYLIB for it. # RUN: %lld -flat_namespace -lSystem %t/main.o %t/baz.dylib -o %t/out -t \ # RUN: --reproduce %t/repro.tar | FileCheck --check-prefix=T %s ## FIXME: The `bar.dylib` line should use `T-NEXT`, but on Windows we load ## libSystem.tbd with different slash styles and end up loading it twice ## for that reason. # T: main.o # T-NEXT: baz.dylib # T: bar.dylib # T-NEXT: foo.dylib # RUN: llvm-objdump --macho --all-headers %t/out \ # RUN: | FileCheck --check-prefix=HEADERBITS %s # RUN: llvm-objdump --macho --bind --lazy-bind --weak-bind %t/out \ # RUN: | FileCheck --check-prefix=FLAT %s # RUN: llvm-nm -m %t/out | FileCheck --check-prefix=FLATSYM %s # RUN: llvm-readobj --syms %t/out | FileCheck --check-prefix=FLATSYM-READOBJ %s # RUN: cd %t # RUN: tar -tf repro.tar | FileCheck -DPATH='%:t.dir' --check-prefix=REPRO %s # RUN: tar -xf repro.tar repro/response.txt # RUN: FileCheck --implicit-check-not=dylib --check-prefix=RESPONSE %s \ # RUN: < %t/repro/response.txt # HEADERBITS-NOT: NOUNDEFS # HEADERBITS-NOT: TWOLEVEL # HEADERBITS: DYLDLINK # HEADERBITS-NOT: foo.dylib # HEADERBITS-NOT: bar.dylib # FLAT: Bind table: # FLAT: __DATA_CONST __got 0x{{[0-9a-f]*}} pointer 0 flat-namespace dyld_stub_binder # FLAT: Lazy bind table: # FLAT-DAG: __DATA __la_symbol_ptr 0x{{[0-9a-f]*}} flat-namespace _bar # FLAT-DAG: __DATA __la_symbol_ptr 0x{{[0-9a-f]*}} flat-namespace _baz # FLAT-DAG: __DATA __la_symbol_ptr 0x{{[0-9a-f]*}} flat-namespace _foo ## No "(dynamically looked up)" because llvm-nm -m doesn't print that ## for files without MH_TWOLEVEL for some reason. # FLATSYM: (undefined) external _bar # FLATSYM: (undefined) external _baz # FLATSYM: (undefined) external _foo ## ...but `llvm-readobj --syms` does, so verify we put the right thing there. # FLATSYM-READOBJ: Flags [ (0xFE00) ## All 3 .dylibs should be in a --reproduce archive. # REPRO: baz.dylib # REPRO: bar.dylib # REPRO: foo.dylib ## ...but only baz.dylib should be in the response file: # RESPONSE: baz.dylib # Undefined symbols should still cause errors by default. # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \ # RUN: -o %t/main-with-undef.o %t/main-with-undef.s # RUN: not %lld -flat_namespace -lSystem %t/main-with-undef.o %t/bar.dylib \ # RUN: -o %t/out 2>&1 | FileCheck --check-prefix=UNDEF %s # UNDEF: error: undefined symbol: _quux #--- foo.s .globl _foo _foo: ret #--- bar.s .globl _bar _bar: callq _foo ret #--- baz.s .globl _baz _baz: callq _bar ret #--- main.s .globl _main _main: callq _foo callq _bar callq _baz ret #--- main-with-undef.s .globl _main _main: callq _foo callq _bar callq _baz callq _quux ret