From a13212582a901beb57f9c041df68c7b34eef0524 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Sat, 4 Apr 2020 10:24:48 -0700 Subject: [PATCH] [ELF][test] Test that thunks are processed before finalizeSynthetic(in.symTab) finalizeSynthetic(in.symTab) calls sortSymTabSymbols() to order local symbols before non-local symbols. The newly added tests ensure that thunk symbols are added before finalizeSynthetic(in.symTab), otherwise .symtab would be out of order. --- lld/test/ELF/aarch64-thunk-script.s | 15 +++++++++++++++ lld/test/ELF/ppc32-long-thunk.s | 8 ++++++++ lld/test/ELF/ppc64-long-branch.s | 9 +++++++++ 3 files changed, 32 insertions(+) diff --git a/lld/test/ELF/aarch64-thunk-script.s b/lld/test/ELF/aarch64-thunk-script.s index 5b5a53b..02bf115 100644 --- a/lld/test/ELF/aarch64-thunk-script.s +++ b/lld/test/ELF/aarch64-thunk-script.s @@ -6,6 +6,7 @@ // RUN: } " > %t.script // RUN: ld.lld --script %t.script %t.o -o %t // RUN: llvm-objdump -d --no-show-raw-insn --print-imm-hex %t | FileCheck %s +// RUN: llvm-nm --no-sort %t | FileCheck --check-prefix=NM %s // Check that we have the out of branch range calculation right. The immediate // field is signed so we have a slightly higher negative displacement. @@ -50,3 +51,17 @@ high_target: // CHECK-NEXT: : // CHECK-NEXT: 8002000: bl #-0x8000000 <_start> // CHECK-NEXT: ret + +/// Local symbols copied from %t.o +// NM: t $x.0 +// NM-NEXT: t $x.1 +/// Local thunk symbols. +// NM-NEXT: t __AArch64AbsLongThunk_high_target +// NM-NEXT: t $x +// NM-NEXT: t $d +// NM-NEXT: t __AArch64AbsLongThunk_{{$}} +// NM-NEXT: t $x +// NM-NEXT: t $d +/// Global symbols. +// NM-NEXT: T _start +// NM-NEXT: T high_target diff --git a/lld/test/ELF/ppc32-long-thunk.s b/lld/test/ELF/ppc32-long-thunk.s index 90c284d..4f370dd 100644 --- a/lld/test/ELF/ppc32-long-thunk.s +++ b/lld/test/ELF/ppc32-long-thunk.s @@ -8,10 +8,12 @@ # RUN: ld.lld -T %t.script %t.o -o %t # RUN: llvm-readelf -r %t | FileCheck --check-prefix=SEC %s # RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck --check-prefixes=CHECK,PD %s +# RUN: llvm-nm --no-sort %t | FileCheck --check-prefix=NM %s # RUN: ld.lld -T %t.script -pie %t.o -o %t # RUN: llvm-readelf -r %t | FileCheck --check-prefix=SEC %s # RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck --check-prefixes=CHECK,PI %s +# RUN: llvm-nm --no-sort %t | FileCheck --check-prefix=NM %s # SEC: There are no relocations in this file. @@ -85,3 +87,9 @@ nop high: bl .text_low+8 bl .text_low+8 # Need a thunk + +# NM: t __LongThunk_high +# NM-NEXT: t __LongThunk_ +# NM-NEXT: t __LongThunk_ +# NM-NEXT: T _start +# NM-NEXT: T high diff --git a/lld/test/ELF/ppc64-long-branch.s b/lld/test/ELF/ppc64-long-branch.s index 35286e1..cf23364 100644 --- a/lld/test/ELF/ppc64-long-branch.s +++ b/lld/test/ELF/ppc64-long-branch.s @@ -9,12 +9,14 @@ # RUN: llvm-readelf -S -r %t | FileCheck --check-prefix=SEC %s # RUN: llvm-readelf -x .branch_lt %t | FileCheck --check-prefix=BRANCH-LE %s # RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck %s +# RUN: llvm-nm --no-sort %t | FileCheck --check-prefix=NM %s # RUN: llvm-mc -filetype=obj -triple=ppc64 %s -o %t.o # RUN: ld.lld -T %t.script %t.o -o %t # RUN: llvm-readelf -S -r %t | FileCheck --check-prefix=SEC %s # RUN: llvm-readelf -x .branch_lt %t | FileCheck --check-prefix=BRANCH-BE %s # RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck %s +# RUN: llvm-nm --no-sort %t | FileCheck --check-prefix=NM %s # SEC: Name Type Address Off Size ES Flg Lk Inf Al # SEC: .got PROGBITS 0000000002002028 2002028 000008 00 WA 0 0 8 @@ -80,3 +82,10 @@ addi 2, 2, .TOC.-high@l bl .text_low+8 bl .text_low+8 # Need a thunk blr + +# NM: d .TOC. +# NM-NEXT: t __long_branch_high +# NM-NEXT: t __long_branch_{{$}} +# NM-NEXT: t __long_branch_{{$}} +# NM-NEXT: T _start +# NM-NEXT: T high -- 2.7.4