198 lines · plain
1# REQUIRES: x862# RUN: rm -rf %t && split-file %s %t3# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/a.s -o %t/a.o4# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/b.s -o %t/b.o5# RUN: ld.lld -shared %t/a.o %t/b.o -o %t0.so6# RUN: llvm-readobj -r %t0.so | FileCheck %s --check-prefix=REL_DEF7# RUN: llvm-objdump -d %t0.so | FileCheck %s --check-prefix=ASM_DEF8 9## -Bsymbolic-non-weak-functions makes all STB_GLOBAL STT_FUNC definitions non-preemptible.10# RUN: ld.lld -shared -Bsymbolic-non-weak-functions %t/a.o %t/b.o -o %t1.so11# RUN: llvm-readobj -r %t1.so | FileCheck %s --check-prefix=REL_GFUN12# RUN: llvm-objdump -d %t1.so | FileCheck %s --check-prefix=ASM_GFUN13 14## -Bsymbolic-functions makes all STT_FUNC definitions non-preemptible.15# RUN: ld.lld -shared -Bsymbolic-functions %t/a.o %t/b.o -o %t2.so16# RUN: llvm-readobj -r %t2.so | FileCheck %s --check-prefix=REL_FUN17# RUN: llvm-objdump -d %t2.so | FileCheck %s --check-prefix=ASM_FUN18 19## -Bsymbolic makes all definitions non-preemptible.20# RUN: ld.lld -shared -Bsymbolic %t/a.o %t/b.o -o %t3.so21# RUN: llvm-readobj -r %t3.so | FileCheck %s --check-prefix=REL_ALL22# RUN: llvm-objdump -d %t3.so | FileCheck %s --check-prefix=ASM_ALL23 24## -Bsymbolic-non-weak makes all STB_GLOBAL definitions non-preemptible.25# RUN: ld.lld -shared -Bsymbolic-non-weak %t/a.o %t/b.o -o %t4.so26# RUN: llvm-readobj -r %t4.so | FileCheck %s --check-prefix=REL_GALL27# RUN: llvm-objdump -d %t4.so | FileCheck %s --check-prefix=ASM_GALL28 29# RUN: ld.lld -shared -Bsymbolic-functions -Bsymbolic %t/a.o %t/b.o -o %t.so30# RUN: cmp %t.so %t3.so31# RUN: ld.lld -shared -Bsymbolic -Bsymbolic-functions %t/a.o %t/b.o -o %t.so32# RUN: cmp %t.so %t2.so33# RUN: ld.lld -shared -Bno-symbolic -Bsymbolic %t/a.o %t/b.o -o %t.so34# RUN: cmp %t.so %t3.so35 36## -Bno-symbolic can cancel previously specified -Bsymbolic and -Bsymbolic-functions.37# RUN: ld.lld -shared -Bsymbolic -Bno-symbolic %t/a.o %t/b.o -o %t.so38# RUN: cmp %t.so %t0.so39# RUN: ld.lld -shared -Bsymbolic-functions -Bno-symbolic %t/a.o %t/b.o -o %t.so40# RUN: cmp %t.so %t0.so41 42# REL_DEF: .rela.dyn {43# REL_DEF-NEXT: R_X86_64_RELATIVE -44# REL_DEF-NEXT: R_X86_64_RELATIVE -45# REL_DEF-NEXT: R_X86_64_64 data_weak_default46# REL_DEF-NEXT: R_X86_64_64 data_default47# REL_DEF-NEXT: }48# REL_DEF-NEXT: .rela.plt {49# REL_DEF-NEXT: R_X86_64_JUMP_SLOT default50# REL_DEF-NEXT: R_X86_64_JUMP_SLOT notype_default51# REL_DEF-NEXT: R_X86_64_JUMP_SLOT weak_default52# REL_DEF-NEXT: R_X86_64_JUMP_SLOT ext_default53# REL_DEF-NEXT: R_X86_64_JUMP_SLOT undef54# REL_DEF-NEXT: }55 56# ASM_DEF: <_start>:57# ASM_DEF-NEXT: callq {{.*}} <default@plt>58# ASM_DEF-NEXT: callq {{.*}} <protected>59# ASM_DEF-NEXT: callq {{.*}} <hidden>60# ASM_DEF-NEXT: callq {{.*}} <weak_default@plt>61# ASM_DEF-NEXT: callq {{.*}} <ext_default@plt>62# ASM_DEF-NEXT: callq {{.*}} <notype_default@plt>63# ASM_DEF-NEXT: callq {{.*}} <undef@plt>64 65# REL_GFUN: .rela.dyn {66# REL_GFUN-NEXT: R_X86_64_RELATIVE -67# REL_GFUN-NEXT: R_X86_64_RELATIVE -68# REL_GFUN-NEXT: R_X86_64_64 data_weak_default69# REL_GFUN-NEXT: R_X86_64_64 data_default70# REL_GFUN-NEXT: }71# REL_GFUN-NEXT: .rela.plt {72# REL_GFUN-NEXT: R_X86_64_JUMP_SLOT notype_default73# REL_GFUN-NEXT: R_X86_64_JUMP_SLOT weak_default74# REL_GFUN-NEXT: R_X86_64_JUMP_SLOT undef75# REL_GFUN-NEXT: }76 77# ASM_GFUN: <_start>:78# ASM_GFUN-NEXT: callq {{.*}} <default>79# ASM_GFUN-NEXT: callq {{.*}} <protected>80# ASM_GFUN-NEXT: callq {{.*}} <hidden>81# ASM_GFUN-NEXT: callq {{.*}} <weak_default@plt>82# ASM_GFUN-NEXT: callq {{.*}} <ext_default>83# ASM_GFUN-NEXT: callq {{.*}} <notype_default@plt>84# ASM_GFUN-NEXT: callq {{.*}} <undef@plt>85 86# REL_FUN: .rela.dyn {87# REL_FUN-NEXT: R_X86_64_RELATIVE -88# REL_FUN-NEXT: R_X86_64_RELATIVE -89# REL_FUN-NEXT: R_X86_64_64 data_weak_default90# REL_FUN-NEXT: R_X86_64_64 data_default91# REL_FUN-NEXT: }92# REL_FUN-NEXT: .rela.plt {93# REL_FUN-NEXT: R_X86_64_JUMP_SLOT notype_default94# REL_FUN-NEXT: R_X86_64_JUMP_SLOT undef95# REL_FUN-NEXT: }96 97# ASM_FUN: <_start>:98# ASM_FUN-NEXT: callq {{.*}} <default>99# ASM_FUN-NEXT: callq {{.*}} <protected>100# ASM_FUN-NEXT: callq {{.*}} <hidden>101# ASM_FUN-NEXT: callq {{.*}} <weak_default>102# ASM_FUN-NEXT: callq {{.*}} <ext_default>103# ASM_FUN-NEXT: callq {{.*}} <notype_default@plt>104# ASM_FUN-NEXT: callq {{.*}} <undef@plt>105 106# REL_ALL: .rela.dyn {107# REL_ALL-NEXT: R_X86_64_RELATIVE -108# REL_ALL-NEXT: R_X86_64_RELATIVE -109# REL_ALL-NEXT: R_X86_64_RELATIVE -110# REL_ALL-NEXT: R_X86_64_RELATIVE -111# REL_ALL-NEXT: }112# REL_ALL-NEXT: .rela.plt {113# REL_ALL-NEXT: R_X86_64_JUMP_SLOT undef114# REL_ALL-NEXT: }115 116# ASM_ALL: <_start>:117# ASM_ALL-NEXT: callq {{.*}} <default>118# ASM_ALL-NEXT: callq {{.*}} <protected>119# ASM_ALL-NEXT: callq {{.*}} <hidden>120# ASM_ALL-NEXT: callq {{.*}} <weak_default>121# ASM_ALL-NEXT: callq {{.*}} <ext_default>122# ASM_ALL-NEXT: callq {{.*}} <notype_default>123# ASM_ALL-NEXT: callq {{.*}} <undef@plt>124 125# REL_GALL: .rela.dyn {126# REL_GALL-NEXT: R_X86_64_RELATIVE -127# REL_GALL-NEXT: R_X86_64_RELATIVE -128# REL_GALL-NEXT: R_X86_64_RELATIVE -129# REL_GALL-NEXT: R_X86_64_64 data_weak_default130# REL_GALL-NEXT: }131# REL_GALL-NEXT: .rela.plt {132# REL_GALL-NEXT: R_X86_64_JUMP_SLOT weak_default133# REL_GALL-NEXT: R_X86_64_JUMP_SLOT undef134# REL_GALL-NEXT: }135 136# ASM_GALL: <_start>:137# ASM_GALL-NEXT: callq {{.*}} <default>138# ASM_GALL-NEXT: callq {{.*}} <protected>139# ASM_GALL-NEXT: callq {{.*}} <hidden>140# ASM_GALL-NEXT: callq {{.*}} <weak_default@plt>141# ASM_GALL-NEXT: callq {{.*}} <ext_default>142# ASM_GALL-NEXT: callq {{.*}} <notype_default>143# ASM_GALL-NEXT: callq {{.*}} <undef@plt>144 145#--- a.s146.globl default, protected, hidden, notype_default147.weak weak_default148.protected protected149.hidden hidden150.type default, @function151.type protected, @function152.type hidden, @function153.type weak_default, @function154default: nop155protected: nop156hidden: nop157weak_default: nop158notype_default: nop159 160.globl _start161_start:162 callq default@PLT163 callq protected@PLT164 callq hidden@PLT165 166 callq weak_default@PLT167 168 callq ext_default@PLT169 170 callq notype_default@PLT171 172 callq undef@PLT173 174.data175 .quad data_default176 .quad data_weak_default177 .quad data_protected178 .quad data_hidden179 180.globl data_default, data_weak_default, data_protected, data_hidden181.weak data_weak_default182.protected data_protected183.hidden data_hidden184.type data_default, @object185.type data_weak_default, @object186.type data_protected, @object187.type data_hidden, @object188data_default: .byte 0189data_weak_default: .byte 0190data_protected: .byte 0191data_hidden: .byte 0192 193#--- b.s194.globl ext_default195.type ext_default,@function196ext_default:197 nop198