diff --git a/lld/test/MachO/Inputs/libfunction.s b/lld/test/MachO/Inputs/libfunction.s deleted file mode 100644 --- a/lld/test/MachO/Inputs/libfunction.s +++ /dev/null @@ -1,6 +0,0 @@ -.section __TEXT,__text -.globl _some_function - -_some_function: - mov $1, %rax - ret diff --git a/lld/test/MachO/archive.s b/lld/test/MachO/archive.s --- a/lld/test/MachO/archive.s +++ b/lld/test/MachO/archive.s @@ -1,11 +1,10 @@ # REQUIRES: x86 -# RUN: mkdir -p %t -# RUN: echo ".global _boo; _boo: ret" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/2.o -# RUN: echo ".global _bar; _bar: ret" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/3.o -# RUN: echo ".global _undefined; .global _unused; _unused: ret" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/4.o -# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/main.o +# RUN: rm -rf %t; split-file %s %t +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/2.s -o %t/2.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/3.s -o %t/3.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/4.s -o %t/4.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/main.s -o %t/main.o -# RUN: rm -f %t/test.a # RUN: llvm-ar rcs %t/test.a %t/2.o %t/3.o %t/4.o # RUN: %lld %t/main.o %t/test.a -o %t/test.out @@ -33,9 +32,24 @@ # ALL-LOAD: T _main # ALL-LOAD: T _unused -.global _main +#--- 2.s +.globl _boo +_boo: + ret + +#--- 3.s +.globl _bar +_bar: + ret + +#--- 4.s +.globl _undefined, _unused +_unused: + ret + +#--- main.s +.globl _main _main: callq _boo callq _bar - mov $0, %rax ret diff --git a/lld/test/MachO/common-symbol-resolution.s b/lld/test/MachO/common-symbol-resolution.s --- a/lld/test/MachO/common-symbol-resolution.s +++ b/lld/test/MachO/common-symbol-resolution.s @@ -1,5 +1,5 @@ # REQUIRES: x86 -# RUN: split-file %s %t +# RUN: rm -rf %t; split-file %s %t # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/common.s -o %t/common.o # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/weak-common.s -o %t/weak-common.o @@ -11,7 +11,6 @@ # RUN: %lld -lSystem -order_file %t/order -dylib %t/libfoo.o -o %t/libfoo.dylib -# RUN: rm -f %t/defined.a %t/weak-defined-and-common.a # RUN: llvm-ar rcs %t/defined.a %t/defined.o # RUN: llvm-ar rcs %t/weak-defined-and-common.a %t/weak-defined.o %t/common.o diff --git a/lld/test/MachO/filelist.s b/lld/test/MachO/filelist.s --- a/lld/test/MachO/filelist.s +++ b/lld/test/MachO/filelist.s @@ -3,10 +3,10 @@ ## This test verifies that the paths in -filelist get processed in command-line ## order. -# RUN: mkdir -p %t -# RUN: echo ".globl _foo; .weak_definition _foo; .section __TEXT,first; _foo:" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/first.o -# RUN: echo ".globl _foo; .weak_definition _foo; .section __TEXT,second; _foo:" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/second.o -# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/test.o +# RUN: rm -rf %t; split-file %s %t +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/first.s -o %t/first.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/second.s -o %t/second.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o # FIRST: __TEXT,first _foo # SECOND: __TEXT,second _foo @@ -34,7 +34,19 @@ # RUN: %lld -filelist filelist-2 -filelist filelist-1 %t/test.o -o %t/test # RUN: llvm-objdump --syms %t/test | FileCheck %s --check-prefix=SECOND -.globl _main +#--- first.s +.globl _foo +.weak_definition _foo +.section __TEXT,first +_foo: + +#--- second.s +.globl _foo +.weak_definition _foo +.section __TEXT,second +_foo: +#--- test.s +.globl _main _main: ret diff --git a/lld/test/MachO/force-load.s b/lld/test/MachO/force-load.s --- a/lld/test/MachO/force-load.s +++ b/lld/test/MachO/force-load.s @@ -1,10 +1,9 @@ # REQUIRES: x86 -# RUN: mkdir -p %t -# RUN: echo ".section __TEXT,archive; .globl _foo; .weak_definition _foo; _foo:" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/archive-foo.o -# RUN: rm -f %t/foo.a +# RUN: rm -rf %t; split-file %s %t +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/archive-foo.s -o %t/archive-foo.o # RUN: llvm-ar rcs %t/foo.a %t/archive-foo.o -# RUN: echo ".section __TEXT,obj; .globl _foo; .weak_definition _foo; _foo:" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/foo.o -# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/test.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/foo.s -o %t/foo.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o # RUN: %lld -force_load %t/foo.a %t/foo.o %t/test.o -o %t/test-force-load-first # FORCE-LOAD-FIRST: __TEXT,archive _foo @@ -14,6 +13,19 @@ # RUN: llvm-objdump --syms %t/test-force-load-second | FileCheck %s --check-prefix=FORCE-LOAD-SECOND # FORCE-LOAD-SECOND: __TEXT,obj _foo +#--- archive-foo.s +.section __TEXT,archive +.globl _foo +.weak_definition _foo +_foo: + +#--- foo.s +.section __TEXT,obj +.globl _foo +.weak_definition _foo +_foo: + +#--- test.s .globl _main _main: ret diff --git a/lld/test/MachO/framework.s b/lld/test/MachO/framework.s --- a/lld/test/MachO/framework.s +++ b/lld/test/MachO/framework.s @@ -1,13 +1,13 @@ # REQUIRES: x86, shell -# RUN: mkdir -p %t -# RUN: echo ".globl _foo; _foo: ret" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/foo.o +# RUN: rm -rf %t; split-file %s %t +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/foo.s -o %t/foo.o # RUN: mkdir -p %t/Foo.framework/Versions/A # RUN: %lld -dylib -install_name %t/Foo.framework/Versions/A/Foo %t/foo.o -o %t/Foo.framework/Versions/A/Foo # RUN: %lld -dylib -install_name %t/Foo.framework/Versions/A/Foobar %t/foo.o -o %t/Foo.framework/Versions/A/Foobar # RUN: ln -sf %t/Foo.framework/Versions/A %t/Foo.framework/Versions/Current # RUN: ln -sf %t/Foo.framework/Versions/Current/Foo %t/Foo.framework/Foo -# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/test.o %s +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o # RUN: %lld -lSystem -F%t -framework Foo %t/test.o -o %t/test # RUN: llvm-objdump --macho --lazy-bind %t/test | FileCheck %s --check-prefix=NOSUFFIX # NOSUFFIX: __DATA __la_symbol_ptr 0x{{[0-9a-f]*}} {{.*}}Foo _foo @@ -19,6 +19,12 @@ # RUN: llvm-objdump --macho --lazy-bind %t/test-suffix | FileCheck %s --check-prefix=SUFFIX # SUFFIX: __DATA __la_symbol_ptr 0x{{[0-9a-f]*}} {{.*}}Foobar _foo +#--- foo.s +.globl _foo +_foo: + ret + +#--- test.s .globl _main .text _main: diff --git a/lld/test/MachO/invalid/archive-no-index.s b/lld/test/MachO/invalid/archive-no-index.s --- a/lld/test/MachO/invalid/archive-no-index.s +++ b/lld/test/MachO/invalid/archive-no-index.s @@ -1,16 +1,31 @@ # REQUIRES: x86 -# RUN: mkdir -p %t -# RUN: echo ".global _boo; _boo: ret" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/2.o -# RUN: echo ".global _bar; _bar: ret" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/3.o -# RUN: echo ".global _undefined; .global _unused; _unused: ret" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/4.o +# RUN: rm -rf %t; split-file %s %t +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/2.s -o %t/2.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/3.s -o %t/3.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/4.s -o %t/4.o # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/main.o -# RUN: rm -f %t/test.a # RUN: llvm-ar rcS %t/test.a %t/2.o %t/3.o %t/4.o # RUN: not %lld %t/test.o %t/test.a -o /dev/null 2>&1 | FileCheck %s # CHECK: error: {{.*}}.a: archive has no index; run ranlib to add one +#--- 2.s +.globl _boo +_boo: + ret + +#--- 3.s +.globl _bar +_bar: + ret + +#--- 4.s +.globl _undefined, _unused +_unused: + ret + +#--- main.s .global _main _main: mov $0, %rax diff --git a/lld/test/MachO/invalid/bad-archive-member.s b/lld/test/MachO/invalid/bad-archive-member.s --- a/lld/test/MachO/invalid/bad-archive-member.s +++ b/lld/test/MachO/invalid/bad-archive-member.s @@ -1,9 +1,8 @@ # REQUIRES: x86 -# RUN: split-file %s %t +# RUN: rm -rf %t; split-file %s %t # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/foo.s -o %t/foo.o # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o # RUN: %lld -dylib -lSystem %t/foo.o -o %t/foo.dylib -# RUN: rm -f %t/foo.a # RUN: llvm-ar rcs %t/foo.a %t/foo.dylib # RUN: not %lld %t/test.o %t/foo.a -o /dev/null 2>&1 | FileCheck %s -DFILE=%t/foo.a # CHECK: error: [[FILE]]: archive member foo.dylib has unhandled file type diff --git a/lld/test/MachO/lto-archive.ll b/lld/test/MachO/lto-archive.ll --- a/lld/test/MachO/lto-archive.ll +++ b/lld/test/MachO/lto-archive.ll @@ -1,8 +1,7 @@ ; REQUIRES: x86 -; RUN: split-file %s %t +; RUN: rm -rf %t; split-file %s %t ; RUN: llvm-as %t/foo.ll -o %t/foo.o ; RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o -; RUN: rm -f %t/foo.a ; RUN: llvm-ar rcs %t/foo.a %t/foo.o ; RUN: %lld -save-temps -lSystem %t/test.o %t/foo.a -o %t/test ; RUN: llvm-objdump -d --macho --no-show-raw-insn %t/test | FileCheck %s diff --git a/lld/test/MachO/objc.s b/lld/test/MachO/objc.s --- a/lld/test/MachO/objc.s +++ b/lld/test/MachO/objc.s @@ -1,12 +1,10 @@ # REQUIRES: x86 -# RUN: split-file %s %t +# RUN: rm -rf %t; split-file %s %t # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/has-objc-symbol.s -o %t/has-objc-symbol.o # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/has-objc-category.s -o %t/has-objc-category.o # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/has-swift.s -o %t/has-swift.o # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/no-objc.s -o %t/no-objc.o - -# RUN: rm -f %t/libHasSomeObjC.a # RUN: llvm-ar rcs %t/libHasSomeObjC.a %t/has-objc-symbol.o %t/has-objc-category.o %t/has-swift.o %t/no-objc.o # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o diff --git a/lld/test/MachO/order-file.s b/lld/test/MachO/order-file.s --- a/lld/test/MachO/order-file.s +++ b/lld/test/MachO/order-file.s @@ -2,7 +2,6 @@ # RUN: rm -rf %t; split-file %s %t # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/foo.s -o %t/foo.o -# RUN: rm -f %t/foo.a # RUN: llvm-ar rcs %t/foo.a %t/foo.o # FOO-FIRST: <_bar>: diff --git a/lld/test/MachO/resolution.s b/lld/test/MachO/resolution.s --- a/lld/test/MachO/resolution.s +++ b/lld/test/MachO/resolution.s @@ -1,18 +1,17 @@ # REQUIRES: x86 -# RUN: mkdir -p %t -# RUN: echo '.globl _foo, _bar, _baz; _foo: _bar: _baz:' | \ -# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/libresolution.o +# RUN: rm -rf %t; split-file %s %t +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/libresolution.s -o %t/libresolution.o # RUN: %lld -dylib -install_name \ # RUN: @executable_path/libresolution.dylib %t/libresolution.o -o %t/libresolution.dylib # RUN: %lld -dylib -install_name \ # RUN: @executable_path/libresolution2.dylib %t/libresolution.o -o %t/libresolution2.dylib -# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/resolution.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/resolution.s -o %t/resolution.o ## Check that we select the symbol defined in the first dylib passed on the ## command line. # RUN: %lld -o %t/dylib-first -L%t -lresolution -lresolution2 %t/resolution.o # RUN: llvm-objdump --macho --bind %t/dylib-first | FileCheck %s --check-prefix=DYLIB-FIRST -# DYLIB-FIRST: libresolution _foo +# DYLIB-FIRST: libresolution _foo # RUN: %lld -o %t/dylib2-first -L%t -lresolution2 -lresolution %t/resolution.o # RUN: llvm-objdump --macho --bind %t/dylib2-first | FileCheck %s --check-prefix=DYLIB2-FIRST @@ -31,6 +30,13 @@ # OBJ-FIRST-NOT: libresolution _bar # OBJ-FIRST-NOT: libresolution _baz +#--- libresolution.s +.globl _foo, _bar, _baz +_foo: +_bar: +_baz: + +#--- resolution.s .globl _main, _bar # Global defined symbol _bar: diff --git a/lld/test/MachO/section-merge.s b/lld/test/MachO/section-merge.s --- a/lld/test/MachO/section-merge.s +++ b/lld/test/MachO/section-merge.s @@ -1,10 +1,10 @@ # REQUIRES: x86 -# RUN: mkdir -p %t +# RUN: rm -rf %t; split-file %s %t ## Verify that we preserve alignment when merging sections. -# RUN: echo ".globl _foo; .data; .p2align 0; _foo: .byte 0xca" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/foo.o -# RUN: echo ".globl _bar; .data; .p2align 2; _bar: .byte 0xfe" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/bar.o -# RUN: echo ".globl _baz; .data; .p2align 3; _baz: .byte 0xba" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/baz.o -# RUN: echo ".globl _qux; .data; .p2align 0; _qux: .quad 0xdeadbeef" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/qux.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/foo.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/bar.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/baz.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/qux.o # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/main.o # RUN: %lld -o %t/output %t/foo.o %t/bar.o %t/baz.o %t/qux.o %t/main.o @@ -18,8 +18,37 @@ # CHECK: Contents of section __DATA,__data: # CHECK-NEXT: {{0*}}[[#ADDR]] ca000000 fe000000 baefbead de000000 +#--- foo.s +.globl _foo +.data +.p2align 0 +_foo: + .byte 0xca + +#--- bar.s +.globl _bar +.data +.p2align 2 +_bar: + .byte 0xfe + +#--- baz.s +.globl _baz +.data +.p2align 3 +_baz: + .byte 0xba + +#--- qux.s +.globl _qux +.data +.p2align 0 +_qux: + .quad 0xdeadbeef + +#--- main.s .section __TEXT,__text -.global _main +.globl _main _main: mov $0, %rax diff --git a/lld/test/MachO/stabs.s b/lld/test/MachO/stabs.s --- a/lld/test/MachO/stabs.s +++ b/lld/test/MachO/stabs.s @@ -1,13 +1,12 @@ # REQUIRES: x86, shell # UNSUPPORTED: system-windows -# RUN: split-file %s %t +# RUN: rm -rf %t; split-file %s %t # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/foo.s -o %t/foo.o # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/no-debug.s -o %t/no-debug.o ## Set modtimes of the files for deterministic test output. # RUN: env TZ=UTC touch -t "197001010000.16" %t/test.o # RUN: env TZ=UTC touch -t "197001010000.32" %t/foo.o -# RUN: rm -f %t/foo.a # RUN: llvm-ar rcsU %t/foo.a %t/foo.o # RUN: %lld -lSystem %t/test.o %t/foo.o %t/no-debug.o -o %t/test diff --git a/lld/test/MachO/subsections-section-relocs.s b/lld/test/MachO/subsections-section-relocs.s --- a/lld/test/MachO/subsections-section-relocs.s +++ b/lld/test/MachO/subsections-section-relocs.s @@ -1,9 +1,6 @@ # REQUIRES: x86 -# RUN: mkdir -p %t -# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/test.o - -# RUN: echo "_bar_str" > %t/order-file -# RUN: echo "_foo_str" >> %t/order-file +# RUN: rm -rf %t; split-file %s %t +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o # RUN: %lld -o %t/test %t/test.o -order_file %t/order-file # RUN: llvm-objdump --section-headers -d --no-show-raw-insn %t/test | FileCheck %s @@ -20,6 +17,11 @@ # STRINGS: Private symbol # STRINGS: foo +#--- order-file +_bar_str +_foo_str + +#--- test.s .text .globl _main, _foo_str, _bar_str diff --git a/lld/test/MachO/subsections-symbol-relocs.s b/lld/test/MachO/subsections-symbol-relocs.s --- a/lld/test/MachO/subsections-symbol-relocs.s +++ b/lld/test/MachO/subsections-symbol-relocs.s @@ -1,21 +1,6 @@ # REQUIRES: x86 -# RUN: mkdir -p %t -# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/test.o - -# RUN: echo "_bar" > %t/order-file-1 -# RUN: echo "_foo" >> %t/order-file-1 -# RUN: echo "_main" >> %t/order-file-1 -## _qux is marked as .alt_entry, so it should not create a new subsection and -## its contents should move with _bar to the start of the output despite the -## order file listing it at the end. -# RUN: echo "_qux" >> %t/order-file-1 - -## _bar and _baz point to the same address, so both order files should achieve -## the same result. -# RUN: echo "_baz" > %t/order-file-2 -# RUN: echo "_foo" >> %t/order-file-2 -# RUN: echo "_main" >> %t/order-file-2 -# RUN: echo "_qux" >> %t/order-file-2 +# RUN: rm -rf %t; split-file %s %t +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o # RUN: %lld -o %t/test-1 %t/test.o -order_file %t/order-file-1 # RUN: llvm-objdump -d --no-show-raw-insn %t/test-1 | FileCheck %s @@ -34,6 +19,24 @@ # CHECK-NEXT: movq $0, %rax # CHECK-NEXT: retq +#--- order-file-1 +_bar +_foo +_main +## _qux is marked as .alt_entry, so it should not create a new subsection and +## its contents should move with _bar to the start of the output despite the +## order file listing it at the end. +_qux + +#--- order-file-2 +## _bar and _baz point to the same address, so both order files should achieve +## the same result. +_baz +_foo +_main +_qux + +#--- test.s .text .globl _main, _foo, _bar, _qux .alt_entry _qux diff --git a/lld/test/MachO/symbol-order.s b/lld/test/MachO/symbol-order.s --- a/lld/test/MachO/symbol-order.s +++ b/lld/test/MachO/symbol-order.s @@ -1,16 +1,13 @@ # REQUIRES: x86 -# RUN: mkdir -p %t -# RUN: echo ".global f, g; .section __TEXT,test_g; g: callq f" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/g.o -# RUN: echo ".global f; .section __TEXT,test_f1; f: ret" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/f1.o -# RUN: echo ".global f; .section __TEXT,test_f2; f: ret" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/f2.o -# RUN: echo ".global f, g; .section __TEXT,test_fg; f: ret; g: callq f" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/fg.o -# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/test.o +# RUN: rm -rf %t; split-file %s %t +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/g.s -o %t/g.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/f1.s -o %t/f1.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/f2.s -o %t/f2.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/fg.s -o %t/fg.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o # RUN: %lld -dylib -o %t/libf1.dylib %t/f1.o -lSystem -# RUN: rm -f %t/libf2_g.a # RUN: llvm-ar rcs %t/libf2_g.a %t/f2.o %t/g.o - -# RUN: rm -f %t/libfg.a # RUN: llvm-ar rcs %t/libfg.a %t/fg.o # RUN: %lld %t/libf1.dylib %t/libf2_g.a %t/test.o -o %t/test.out -lSystem @@ -39,6 +36,33 @@ # ARCHIVE-PRIORITY-NEXT: segment section address dylib symbol # ARCHIVE-PRIORITY-EMPTY: +#--- g.s +.global f, g +.section __TEXT,test_g +g: + callq f + +#--- f1.s +.global f +.section __TEXT,test_f1 +f: + ret + +#--- f2.s +.global f +.section __TEXT,test_f2 +f: + ret + +#--- fg.s +.global f, g +.section __TEXT,test_fg +f: + ret +g: + callq f + +#--- test.s .global g .global _main _main: diff --git a/lld/test/MachO/weak-definition-direct-fetch.s b/lld/test/MachO/weak-definition-direct-fetch.s --- a/lld/test/MachO/weak-definition-direct-fetch.s +++ b/lld/test/MachO/weak-definition-direct-fetch.s @@ -1,12 +1,12 @@ # REQUIRES: x86 -# RUN: mkdir -p %t +# RUN: rm -rf %t; split-file %s %t ## This test exercises the various possible combinations of weak and non-weak ## symbols that get referenced directly by a relocation in an object file. -# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/test.o -# RUN: echo ".globl _foo; .section __TEXT,nonweak; _foo:" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/foo.o -# RUN: echo ".globl _foo; .weak_definition _foo; .section __TEXT,weak; _foo:" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/weakfoo.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/foo.s -o %t/foo.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/weakfoo.s -o %t/weakfoo.o # RUN: %lld -dylib -install_name \ # RUN: @executable_path/libfoo.dylib %t/foo.o -o %t/libfoo.dylib @@ -24,9 +24,7 @@ # RUN: llvm-nm %t/libweakfoo.dylib 2>&1 | FileCheck %s --check-prefix=NOSYM # NOSYM: no symbols -# RUN: rm -f %t/foo.a # RUN: llvm-ar --format=darwin rcs %t/foo.a %t/foo.o -# RUN: rm -f %t/weakfoo.a # RUN: llvm-ar --format=darwin rcs %t/weakfoo.a %t/weakfoo.o ## End of input file setup. The following lines check which symbol "wins" when @@ -84,6 +82,18 @@ # RUN: %lld -lSystem -o %t/nonweak-ar-weak-obj -L%t %t/foo.a %t/weakfoo.o %t/test.o # RUN: llvm-objdump --macho --lazy-bind --syms %t/nonweak-ar-weak-obj | FileCheck %s --check-prefix=PREFER-WEAK-OBJECT +#--- foo.s +.globl _foo +.section __TEXT,nonweak +_foo: + +#--- weakfoo.s +.globl _foo +.weak_definition _foo +.section __TEXT,weak +_foo: + +#--- test.s .globl _main _main: callq _foo diff --git a/lld/test/MachO/weak-definition-indirect-fetch.s b/lld/test/MachO/weak-definition-indirect-fetch.s --- a/lld/test/MachO/weak-definition-indirect-fetch.s +++ b/lld/test/MachO/weak-definition-indirect-fetch.s @@ -1,5 +1,5 @@ # REQUIRES: x86 -# RUN: mkdir -p %t +# RUN: rm -rf %t; split-file %s %t ## This tests examines the effect of .weak_definition on symbols in an archive ## that are not referenced directly, but which are still loaded due to some @@ -9,13 +9,11 @@ ## will be fetched when linking against the main test file due to its references ## to _bar and _baz. -# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/test.o -# RUN: echo ".globl _foo, _bar; .section __TEXT,nonweak; _bar: _foo:" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/foo.o -# RUN: echo ".globl _foo, _baz; .weak_definition _foo; .section __TEXT,weak; _baz: _foo:" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/weakfoo.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/foo.s -o %t/foo.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/weakfoo.s -o %t/weakfoo.o -# RUN: rm -f %t/foo.a # RUN: llvm-ar --format=darwin rcs %t/foo.a %t/foo.o -# RUN: rm -f %t/weakfoo.a # RUN: llvm-ar --format=darwin rcs %t/weakfoo.a %t/weakfoo.o # PREFER-NONWEAK-OBJECT: O __TEXT,nonweak _foo @@ -35,6 +33,20 @@ # RUN: %lld -lSystem -o %t/nonweak-ar-weak-obj -L%t %t/foo.a %t/weakfoo.o %t/test.o # RUN: llvm-objdump --syms %t/nonweak-ar-weak-obj | FileCheck %s --check-prefix=PREFER-NONWEAK-OBJECT +#--- foo.s +.globl _foo, _bar +.section __TEXT,nonweak +_bar: +_foo: + +#--- weakfoo.s +.globl _foo, _baz +.weak_definition _foo +.section __TEXT,weak +_baz: +_foo: + +#--- test.s .globl _main _main: callq _bar diff --git a/lld/test/MachO/weak-definition-order.s b/lld/test/MachO/weak-definition-order.s --- a/lld/test/MachO/weak-definition-order.s +++ b/lld/test/MachO/weak-definition-order.s @@ -1,13 +1,13 @@ # REQUIRES: x86 -# RUN: mkdir -p %t +# RUN: rm -rf %t; split-file %s %t ## This test demonstrates that when we have two weak symbols of the same type, ## we pick the one whose containing file appears earlier in the command-line ## invocation. -# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/test.o -# RUN: echo ".globl _foo; .weak_definition _foo; .section __TEXT,weak1; _foo:" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/weak1.o -# RUN: echo ".globl _foo; .weak_definition _foo; .section __TEXT,weak2; _foo:" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/weak2.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/weak1.s -o %t/weak1.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/weak2.s -o %t/weak2.o # RUN: %lld -lSystem -o %t/obj12 -L%t %t/weak1.o %t/weak2.o %t/test.o # RUN: llvm-objdump --syms %t/obj12 | FileCheck %s --check-prefix=WEAK1 @@ -29,6 +29,19 @@ # DYLIB1: __DATA __la_symbol_ptr 0x{{[0-9a-f]*}} pointer 0 libweak1 _foo # DYLIB2: __DATA __la_symbol_ptr 0x{{[0-9a-f]*}} pointer 0 libweak2 _foo +#--- weak1.s +.globl _foo +.weak_definition _foo +.section __TEXT,weak1; +_foo: + +#--- weak2.s +.globl _foo +.weak_definition _foo +.section __TEXT,weak2 +_foo: + +#--- test.s .globl _main _main: callq _foo diff --git a/lld/test/MachO/weak-definition-over-dysym.s b/lld/test/MachO/weak-definition-over-dysym.s --- a/lld/test/MachO/weak-definition-over-dysym.s +++ b/lld/test/MachO/weak-definition-over-dysym.s @@ -1,22 +1,19 @@ # REQUIRES: x86 -# RUN: mkdir -p %t +# RUN: rm -rf %t; split-file %s %t ## This test demonstrates that when an archive file is fetched, its symbols ## always override any conflicting dylib symbols, regardless of any weak ## definition flags. -# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/test.o -# RUN: echo ".globl _foo; _foo:" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/libfoo.o -# RUN: %lld -dylib -install_name \ -# RUN: @executable_path/libfoo.dylib %t/libfoo.o -o %t/libfoo.dylib +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/libfoo.s -o %t/libfoo.o +# RUN: %lld -dylib -install_name @executable_path/libfoo.dylib %t/libfoo.o -o %t/libfoo.dylib -# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/test.o -# RUN: echo ".globl _foo, _bar; .section __TEXT,nonweak; _bar: _foo:" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/foo.o -# RUN: echo ".globl _foo, _bar; .weak_definition _foo; .section __TEXT,weak; _bar: _foo:" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/weakfoo.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/foo.s -o %t/foo.o +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/weakfoo.s -o %t/weakfoo.o -# RUN: rm -f %t/foo.a # RUN: llvm-ar --format=darwin rcs %t/foo.a %t/foo.o -# RUN: rm -f %t/weakfoo.a # RUN: llvm-ar --format=darwin rcs %t/weakfoo.a %t/weakfoo.o # PREFER-WEAK-OBJECT: O __TEXT,weak _foo @@ -32,6 +29,24 @@ # RUN: %lld -lSystem -o %t/nonweak-dylib-weak-obj -L%t -lfoo %t/weakfoo.o %t/test.o # RUN: llvm-objdump --macho --lazy-bind --syms %t/nonweak-dylib-weak-obj | FileCheck %s --check-prefix=PREFER-WEAK-OBJECT +#--- libfoo.s +.globl _foo +_foo: + +#--- foo.s +.globl _foo, _bar +.section __TEXT,nonweak +_bar: +_foo: + +#--- weakfoo.s +.globl _foo, _bar +.weak_definition _foo +.section __TEXT,weak +_bar: +_foo: + +#--- test.s .globl _main _main: callq _foo