| // REQUIRES: x86 |
| // RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t |
| |
| // Should use "_init" and "_fini" by default when fills dynamic table |
| // RUN: ld.lld -shared %t -o %t2 |
| // RUN: llvm-readobj -dynamic-table %t2 | FileCheck --check-prefix=BYDEF %s |
| // BYDEF: INIT 0x11010 |
| // BYDEF: FINI 0x11020 |
| |
| // -init and -fini override symbols to use |
| // RUN: ld.lld -shared %t -o %t2 -init _foo -fini _bar |
| // RUN: llvm-readobj -dynamic-table %t2 | FileCheck --check-prefix=OVR %s |
| // OVR: INIT 0x11030 |
| // OVR: FINI 0x11040 |
| |
| // Check aliases as well |
| // RUN: ld.lld -shared %t -o %t2 -init=_foo -fini=_bar |
| // RUN: llvm-readobj -dynamic-table %t2 | FileCheck --check-prefix=OVR %s |
| |
| // Don't add an entry for undef. The freebsd dynamic linker doesn't |
| // check if the value is null. If it is, it will just call the |
| // load address. |
| // RUN: ld.lld -shared %t -o %t2 -init=_undef -fini=_undef |
| // RUN: llvm-readobj -dynamic-table %t2 | FileCheck --check-prefix=UNDEF %s |
| // UNDEF-NOT: INIT |
| // UNDEF-NOT: FINI |
| |
| // Don't add an entry for shared. For the same reason as undef. |
| // RUN: ld.lld -shared %t -o %t.so |
| // RUN: echo > %t.s |
| // RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %t.s -o %t2.o |
| // RUN: ld.lld -shared %t2.o %t.so -o %t2 |
| // RUN: llvm-readobj -dynamic-table %t2 | FileCheck --check-prefix=SHARED %s |
| // SHARED-NOT: INIT |
| // SHARED-NOT: FINI |
| |
| // Should not add new entries to the symbol table |
| // and should not require given symbols to be resolved |
| // RUN: ld.lld -shared %t -o %t2 -init=_unknown -fini=_unknown |
| // RUN: llvm-readobj -symbols -dynamic-table %t2 | FileCheck --check-prefix=NOENTRY %s |
| // NOENTRY: Symbols [ |
| // NOENTRY-NOT: Name: _unknown |
| // NOENTRY: ] |
| // NOENTRY: DynamicSection [ |
| // NOENTRY-NOT: INIT |
| // NOENTRY-NOT: FINI |
| // NOENTRY: ] |
| |
| .global _start,_init,_fini,_foo,_bar,_undef |
| _start: |
| _init = 0x11010 |
| _fini = 0x11020 |
| _foo = 0x11030 |
| _bar = 0x11040 |