[lld] da9b6d0 - [ELF][test] Improve -Bsymbolic & -Bsymbolic-functions test

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Fri May 14 09:33:47 PDT 2021


Author: Fangrui Song
Date: 2021-05-14T09:33:43-07:00
New Revision: da9b6d0656d8b859fc314a42168358d85f1e03bc

URL: https://github.com/llvm/llvm-project/commit/da9b6d0656d8b859fc314a42168358d85f1e03bc
DIFF: https://github.com/llvm/llvm-project/commit/da9b6d0656d8b859fc314a42168358d85f1e03bc.diff

LOG: [ELF][test] Improve -Bsymbolic & -Bsymbolic-functions test

Previously there was no test checking that -Bsymbolic-functions only applies to STT_FUNC symbols.

Reviewed By: jhenderson

Differential Revision: https://reviews.llvm.org/D102461

Added: 
    

Modified: 
    lld/test/ELF/bsymbolic.s

Removed: 
    


################################################################################
diff  --git a/lld/test/ELF/bsymbolic.s b/lld/test/ELF/bsymbolic.s
index f70cec64ddc8e..a578234f8ac25 100644
--- a/lld/test/ELF/bsymbolic.s
+++ b/lld/test/ELF/bsymbolic.s
@@ -1,35 +1,122 @@
-// REQUIRES: x86
-// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
-// RUN: ld.lld -shared %t.o -o %t0.so
-// RUN: ld.lld -shared -Bsymbolic %t.o -o %t1.so
-// RUN: ld.lld -shared -Bsymbolic-functions %t.o -o %t2.so
-// RUN: llvm-readobj -S %t0.so | FileCheck -check-prefix=NOOPTION %s
-// RUN: llvm-readobj -S %t1.so | FileCheck -check-prefix=SYMBOLIC %s
-// RUN: llvm-readobj -S %t2.so | FileCheck -check-prefix=SYMBOLIC %s
-
-// NOOPTION:     Section {
-// NOOPTION:       Name: .plt
-
-// SYMBOLIC: Section {
-// SYMBOLIC-NOT: Name: .plt
-
-.text
-.globl foo
-.type foo, at function
-foo:
-nop
-
-.globl bar
-.type bar, at function
-bar:
-nop
-
-.globl do
-.type do, at function
-do:
-callq foo at PLT
-callq bar at PLT
-
-.weak zed
-.protected zed
-.quad zed
+# REQUIRES: x86
+# RUN: rm -rf %t && split-file %s %t
+# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/a.s -o %t/a.o
+# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/b.s -o %t/b.o
+# RUN: ld.lld -shared %t/a.o %t/b.o -o %t0.so
+# RUN: llvm-readobj -r %t0.so | FileCheck %s --check-prefix=REL_DEF
+# RUN: llvm-objdump -d %t0.so | FileCheck %s --check-prefix=ASM_DEF
+
+## -Bsymbolic-functions makes all STT_FUNC definitions non-preemptible.
+# RUN: ld.lld -shared -Bsymbolic-functions %t/a.o %t/b.o -o %t1.so
+# RUN: llvm-readobj -r %t1.so | FileCheck %s --check-prefix=REL_FUN
+# RUN: llvm-objdump -d %t1.so | FileCheck %s --check-prefix=ASM_FUN
+
+## -Bsymbolic makes all definitions non-preemptible.
+# RUN: ld.lld -shared -Bsymbolic %t/a.o %t/b.o -o %t2.so
+# RUN: llvm-readobj -r %t2.so | FileCheck %s --check-prefix=REL_ALL
+# RUN: llvm-objdump -d %t2.so | FileCheck %s --check-prefix=ASM_ALL
+
+# RUN: ld.lld -shared -Bsymbolic-functions -Bsymbolic %t/a.o %t/b.o -o %t.so
+# RUN: cmp %t.so %t2.so
+# RUN: ld.lld -shared -Bsymbolic -Bsymbolic-functions %t/a.o %t/b.o -o %t.so
+# RUN: cmp %t.so %t2.so
+
+# REL_DEF:      .rela.dyn {
+# REL_DEF-NEXT:   R_X86_64_RELATIVE -
+# REL_DEF-NEXT:   R_X86_64_RELATIVE -
+# REL_DEF-NEXT:   R_X86_64_64 data_default
+# REL_DEF-NEXT: }
+# REL_DEF-NEXT: .rela.plt {
+# REL_DEF-NEXT:   R_X86_64_JUMP_SLOT default
+# REL_DEF-NEXT:   R_X86_64_JUMP_SLOT ext_default
+# REL_DEF-NEXT:   R_X86_64_JUMP_SLOT notype_default
+# REL_DEF-NEXT:   R_X86_64_JUMP_SLOT undef
+# REL_DEF-NEXT: }
+
+# ASM_DEF:      <_start>:
+# ASM_DEF-NEXT:   callq {{.*}} <default at plt>
+# ASM_DEF-NEXT:   callq {{.*}} <protected>
+# ASM_DEF-NEXT:   callq {{.*}} <hidden>
+# ASM_DEF-NEXT:   callq {{.*}} <ext_default at plt>
+# ASM_DEF-NEXT:   callq {{.*}} <notype_default at plt>
+# ASM_DEF-NEXT:   callq {{.*}} <undef at plt>
+
+# REL_FUN:      .rela.dyn {
+# REL_FUN-NEXT:   R_X86_64_RELATIVE -
+# REL_FUN-NEXT:   R_X86_64_RELATIVE -
+# REL_FUN-NEXT:   R_X86_64_64 data_default
+# REL_FUN-NEXT: }
+# REL_FUN-NEXT: .rela.plt {
+# REL_FUN-NEXT:   R_X86_64_JUMP_SLOT notype_default
+# REL_FUN-NEXT:   R_X86_64_JUMP_SLOT undef
+# REL_FUN-NEXT: }
+
+# ASM_FUN:      <_start>:
+# ASM_FUN-NEXT:   callq {{.*}} <default>
+# ASM_FUN-NEXT:   callq {{.*}} <protected>
+# ASM_FUN-NEXT:   callq {{.*}} <hidden>
+# ASM_FUN-NEXT:   callq {{.*}} <ext_default>
+# ASM_FUN-NEXT:   callq {{.*}} <notype_default at plt>
+# ASM_FUN-NEXT:   callq {{.*}} <undef at plt>
+
+# REL_ALL:      .rela.dyn {
+# REL_ALL-NEXT:   R_X86_64_RELATIVE -
+# REL_ALL-NEXT:   R_X86_64_RELATIVE -
+# REL_ALL-NEXT:   R_X86_64_RELATIVE -
+# REL_ALL-NEXT: }
+# REL_ALL-NEXT: .rela.plt {
+# REL_ALL-NEXT:   R_X86_64_JUMP_SLOT undef
+# REL_ALL-NEXT: }
+
+# ASM_ALL:      <_start>:
+# ASM_ALL-NEXT:   callq {{.*}} <default>
+# ASM_ALL-NEXT:   callq {{.*}} <protected>
+# ASM_ALL-NEXT:   callq {{.*}} <hidden>
+# ASM_ALL-NEXT:   callq {{.*}} <ext_default>
+# ASM_ALL-NEXT:   callq {{.*}} <notype_default>
+# ASM_ALL-NEXT:   callq {{.*}} <undef at plt>
+
+#--- a.s
+.globl default, protected, hidden, notype_default
+.protected protected
+.hidden hidden
+.type default, @function
+.type protected, @function
+.type hidden, @function
+default: nop
+protected: nop
+hidden: nop
+notype_default: nop
+
+.globl _start
+_start:
+  callq default at PLT
+  callq protected at PLT
+  callq hidden at PLT
+
+  callq ext_default at PLT
+
+  callq notype_default at PLT
+
+  callq undef at PLT
+
+.data
+  .quad data_default
+  .quad data_protected
+  .quad data_hidden
+
+.globl data_default, data_protected, data_hidden
+.protected data_protected
+.hidden data_hidden
+.type data_default, @object
+.type data_protected, @object
+.type data_hidden, @object
+data_default: .byte 0
+data_protected: .byte 0
+data_hidden: .byte 0
+
+#--- b.s
+.globl ext_default
+.type ext_default, at function
+ext_default:
+  nop


        


More information about the llvm-commits mailing list