diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2016-01-13 20:06:04 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2016-01-13 20:06:04 +0000 |
commit | b289257c7f3ed78b7d3971c596d7c60a9050c705 (patch) | |
tree | d6b57e29a5a86347a020d6f0cae76cc2d0f3bf8d /test/ELF | |
parent | fba2c04f31e119eacf142fcbbaabd5a9e63a39ed (diff) | |
download | src-b289257c7f3ed78b7d3971c596d7c60a9050c705.tar.gz src-b289257c7f3ed78b7d3971c596d7c60a9050c705.zip |
Vendor import of lld trunk r257626:vendor/lld/lld-trunk-r257626
Notes
Notes:
svn path=/vendor/lld/dist/; revision=293846
svn path=/vendor/lld/lld-trunk-r257626/; revision=293847; tag=vendor/lld/lld-trunk-r257626
Diffstat (limited to 'test/ELF')
26 files changed, 1094 insertions, 24 deletions
diff --git a/test/ELF/Inputs/aarch64-condb-reloc.s b/test/ELF/Inputs/aarch64-condb-reloc.s new file mode 100644 index 000000000000..ebe4923224c7 --- /dev/null +++ b/test/ELF/Inputs/aarch64-condb-reloc.s @@ -0,0 +1,17 @@ +.globl _foo +_foo: + nop + nop + nop + nop + +.globl _bar +_bar: + nop + nop + nop + +.globl _dah +_dah: + nop + nop diff --git a/test/ELF/Inputs/aarch64-tls-ie.s b/test/ELF/Inputs/aarch64-tls-ie.s new file mode 100644 index 000000000000..c5e853ba9798 --- /dev/null +++ b/test/ELF/Inputs/aarch64-tls-ie.s @@ -0,0 +1,19 @@ +.text + .global foo + .section .tdata,"awT",%progbits + .align 2 + .type foo, %object + .size foo, 4 +foo: + .word 5 + .text + +.text + .global bar + .section .tdata,"awT",%progbits + .align 2 + .type bar, %object + .size bar, 4 +bar: + .word 5 + .text diff --git a/test/ELF/Inputs/aarch64-tstbr14-reloc.s b/test/ELF/Inputs/aarch64-tstbr14-reloc.s new file mode 100644 index 000000000000..64dc44033845 --- /dev/null +++ b/test/ELF/Inputs/aarch64-tstbr14-reloc.s @@ -0,0 +1,12 @@ +.globl _foo +_foo: + nop + nop + nop + nop + +.globl _bar +_bar: + nop + nop + nop diff --git a/test/ELF/Inputs/mips-gp-disp.so b/test/ELF/Inputs/mips-gp-disp.so Binary files differnew file mode 100644 index 000000000000..9cbb43720606 --- /dev/null +++ b/test/ELF/Inputs/mips-gp-disp.so diff --git a/test/ELF/Inputs/wrap.s b/test/ELF/Inputs/wrap.s new file mode 100644 index 000000000000..584e27033d5c --- /dev/null +++ b/test/ELF/Inputs/wrap.s @@ -0,0 +1,4 @@ +.globl foo, __wrap_foo, __real_foo +foo = 0x11000 +__wrap_foo = 0x11010 +__real_foo = 0x11020 diff --git a/test/ELF/aarch64-condb-reloc.s b/test/ELF/aarch64-condb-reloc.s new file mode 100644 index 000000000000..630e3430f4e5 --- /dev/null +++ b/test/ELF/aarch64-condb-reloc.s @@ -0,0 +1,99 @@ +# RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-freebsd %p/Inputs/aarch64-condb-reloc.s -o %t1 +# RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-freebsd %s -o %t2 +# RUN: ld.lld %t1 %t2 -o %t +# RUN: llvm-objdump -d %t | FileCheck %s +# RUN: ld.lld -shared %t1 %t2 -o %t3 +# RUN: llvm-objdump -d %t3 | FileCheck -check-prefix=DSO %s +# RUN: llvm-readobj -s -r %t3 | FileCheck -check-prefix=DSOREL %s +# REQUIRES: aarch64 + +# 0x11024 - 36 = 0x11000 +# 0x11028 - 24 = 0x11010 +# 0x1102c - 16 = 0x1101c +# CHECK: Disassembly of section .text: +# CHECK-NEXT: _foo: +# CHECK-NEXT: 11000: {{.*}} nop +# CHECK-NEXT: 11004: {{.*}} nop +# CHECK-NEXT: 11008: {{.*}} nop +# CHECK-NEXT: 1100c: {{.*}} nop +# CHECK: _bar: +# CHECK-NEXT: 11010: {{.*}} nop +# CHECK-NEXT: 11014: {{.*}} nop +# CHECK-NEXT: 11018: {{.*}} nop +# CHECK: _dah: +# CHECK-NEXT: 1101c: {{.*}} nop +# CHECK-NEXT: 11020: {{.*}} nop +# CHECK: _start: +# CHECK-NEXT: 11024: {{.*}} b.eq #-36 +# CHECK-NEXT: 11028: {{.*}} b.eq #-24 +# CHECK-NEXT: 1102c: {{.*}} b.eq #-16 + +#DSOREL: Section { +#DSOREL: Index: +#DSOREL: Name: .got.plt +#DSOREL-NEXT: Type: SHT_PROGBITS +#DSOREL-NEXT: Flags [ +#DSOREL-NEXT: SHF_ALLOC +#DSOREL-NEXT: SHF_WRITE +#DSOREL-NEXT: ] +#DSOREL-NEXT: Address: 0x3000 +#DSOREL-NEXT: Offset: 0x3000 +#DSOREL-NEXT: Size: 48 +#DSOREL-NEXT: Link: 0 +#DSOREL-NEXT: Info: 0 +#DSOREL-NEXT: AddressAlignment: 8 +#DSOREL-NEXT: EntrySize: 0 +#DSOREL-NEXT: } +#DSOREL: Relocations [ +#DSOREL-NEXT: Section ({{.*}}) .rela.plt { +#DSOREL-NEXT: 0x3018 R_AARCH64_JUMP_SLOT _foo +#DSOREL-NEXT: 0x3020 R_AARCH64_JUMP_SLOT _bar +#DSOREL-NEXT: 0x3028 R_AARCH64_JUMP_SLOT _dah +#DSOREL-NEXT: } +#DSOREL-NEXT:] + +#DSO: Disassembly of section .text: +#DSO-NEXT: _foo: +#DSO-NEXT: 1000: {{.*}} nop +#DSO-NEXT: 1004: {{.*}} nop +#DSO-NEXT: 1008: {{.*}} nop +#DSO-NEXT: 100c: {{.*}} nop +#DSO: _bar: +#DSO-NEXT: 1010: {{.*}} nop +#DSO-NEXT: 1014: {{.*}} nop +#DSO-NEXT: 1018: {{.*}} nop +#DSO: _dah: +#DSO-NEXT: 101c: {{.*}} nop +#DSO-NEXT: 1020: {{.*}} nop +#DSO: _start: +#DSO-NEXT: 1024: {{.*}} b.eq #44 +#DSO-NEXT: 1028: {{.*}} b.eq #56 +#DSO-NEXT: 102c: {{.*}} b.eq #68 +#DSO-NEXT: Disassembly of section .plt: +#DSO-NEXT: .plt: +#DSO-NEXT: 1030: {{.*}} stp x16, x30, [sp, #-16]! +#DSO-NEXT: 1034: {{.*}} adrp x16, #8192 +#DSO-NEXT: 1038: {{.*}} ldr x17, [x16, #16] +#DSO-NEXT: 103c: {{.*}} add x16, x16, #16 +#DSO-NEXT: 1040: {{.*}} br x17 +#DSO-NEXT: 1044: {{.*}} nop +#DSO-NEXT: 1048: {{.*}} nop +#DSO-NEXT: 104c: {{.*}} nop +#DSO-NEXT: 1050: {{.*}} adrp x16, #8192 +#DSO-NEXT: 1054: {{.*}} ldr x17, [x16, #24] +#DSO-NEXT: 1058: {{.*}} add x16, x16, #24 +#DSO-NEXT: 105c: {{.*}} br x17 +#DSO-NEXT: 1060: {{.*}} adrp x16, #8192 +#DSO-NEXT: 1064: {{.*}} ldr x17, [x16, #32] +#DSO-NEXT: 1068: {{.*}} add x16, x16, #32 +#DSO-NEXT: 106c: {{.*}} br x17 +#DSO-NEXT: 1070: {{.*}} adrp x16, #8192 +#DSO-NEXT: 1074: {{.*}} ldr x17, [x16, #40] +#DSO-NEXT: 1078: {{.*}} add x16, x16, #40 +#DSO-NEXT: 107c: {{.*}} br x17 + +.globl _start +_start: + b.eq _foo + b.eq _bar + b.eq _dah diff --git a/test/ELF/aarch64-gnu-ifunc-nosym.s b/test/ELF/aarch64-gnu-ifunc-nosym.s new file mode 100644 index 000000000000..d85bf1076601 --- /dev/null +++ b/test/ELF/aarch64-gnu-ifunc-nosym.s @@ -0,0 +1,29 @@ +// RUN: llvm-mc -filetype=obj -triple=aarch64-none-linux-gnu %s -o %t.o +// RUN: ld.lld -static %t.o -o %tout +// RUN: llvm-readobj -symbols %tout | FileCheck %s +// REQUIRES: aarch64 + +// Check that no __rela_iplt_end/__rela_iplt_start +// appear in symtab if there is no references to them. +// CHECK: Symbols [ +// CHECK-NEXT-NOT: __rela_iplt_end +// CHECK-NEXT-NOT: __rela_iplt_start +// CHECK: ] + +.text +.type foo STT_GNU_IFUNC +.globl foo +.type foo, @function +foo: + ret + +.type bar STT_GNU_IFUNC +.globl bar +.type bar, @function +bar: + ret + +.globl _start +_start: + bl foo + bl bar diff --git a/test/ELF/aarch64-gnu-ifunc.s b/test/ELF/aarch64-gnu-ifunc.s new file mode 100644 index 000000000000..4cc94200789d --- /dev/null +++ b/test/ELF/aarch64-gnu-ifunc.s @@ -0,0 +1,144 @@ +// RUN: llvm-mc -filetype=obj -triple=aarch64-none-linux-gnu %s -o %t.o +// RUN: ld.lld -static %t.o -o %tout +// RUN: llvm-objdump -d %tout | FileCheck %s --check-prefix=DISASM +// RUN: llvm-readobj -r -symbols -sections %tout | FileCheck %s --check-prefix=CHECK +// REQUIRES: aarch64 + +// CHECK: Sections [ +// CHECK: Section { +// CHECK: Index: 1 +// CHECK-NEXT: Name: .rela.plt +// CHECK-NEXT: Type: SHT_RELA +// CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_ALLOC +// CHECK-NEXT: ] +// CHECK-NEXT: Address: [[RELA:.*]] +// CHECK-NEXT: Offset: 0x158 +// CHECK-NEXT: Size: 48 +// CHECK-NEXT: Link: 5 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 8 +// CHECK-NEXT: EntrySize: 24 +// CHECK-NEXT: } +// CHECK: Relocations [ +// CHECK-NEXT: Section ({{.*}}) .rela.plt { +// CHECK-NEXT: 0x12018 R_AARCH64_IRELATIVE +// CHECK-NEXT: 0x12020 R_AARCH64_IRELATIVE +// CHECK-NEXT: } +// CHECK-NEXT: ] +// CHECK: Symbols [ +// CHECK-NEXT: Symbol { +// CHECK-NEXT: Name: +// CHECK-NEXT: Value: 0x0 +// CHECK-NEXT: Size: 0 +// CHECK-NEXT: Binding: Local +// CHECK-NEXT: Type: None +// CHECK-NEXT: Other: 0 +// CHECK-NEXT: Section: Undefined +// CHECK-NEXT: } +// CHECK-NEXT: Symbol { +// CHECK-NEXT: Name: $x.0 +// CHECK-NEXT: Value: 0x11000 +// CHECK-NEXT: Size: 0 +// CHECK-NEXT: Binding: Local +// CHECK-NEXT: Type: None +// CHECK-NEXT: Other: 0 +// CHECK-NEXT: Section: .text +// CHECK-NEXT: } +// CHECK-NEXT: Symbol { +// CHECK-NEXT: Name: __rela_iplt_end +// CHECK-NEXT: Value: 0x10188 +// CHECK-NEXT: Size: 0 +// CHECK-NEXT: Binding: Local +// CHECK-NEXT: Type: None +// CHECK-NEXT: Other: 0 +// CHECK-NEXT: Section: Absolute +// CHECK-NEXT: } +// CHECK-NEXT: Symbol { +// CHECK-NEXT: Name: __rela_iplt_start +// CHECK-NEXT: Value: 0x10158 +// CHECK-NEXT: Size: 0 +// CHECK-NEXT: Binding: Local +// CHECK-NEXT: Type: None +// CHECK-NEXT: Other: 0 +// CHECK-NEXT: Section: Absolute +// CHECK-NEXT: } +// CHECK-NEXT: Symbol { +// CHECK-NEXT: Name: _start +// CHECK-NEXT: Value: 0x11008 +// CHECK-NEXT: Size: 0 +// CHECK-NEXT: Binding: Global +// CHECK-NEXT: Type: None +// CHECK-NEXT: Other: 0 +// CHECK-NEXT: Section: .text +// CHECK-NEXT: } +// CHECK-NEXT: Symbol { +// CHECK-NEXT: Name: bar +// CHECK-NEXT: Value: 0x11004 +// CHECK-NEXT: Size: 0 +// CHECK-NEXT: Binding: Global +// CHECK-NEXT: Type: GNU_IFunc +// CHECK-NEXT: Other: 0 +// CHECK-NEXT: Section: .text +// CHECK-NEXT: } +// CHECK-NEXT: Symbol { +// CHECK-NEXT: Name: foo +// CHECK-NEXT: Value: 0x11000 +// CHECK-NEXT: Size: 0 +// CHECK-NEXT: Binding: Global +// CHECK-NEXT: Type: GNU_IFunc +// CHECK-NEXT: Other: 0 +// CHECK-NEXT: Section: .text +// CHECK-NEXT: } +// CHECK-NEXT: ] + +// 344 = 0x158 +// 392 = 0x188 +// DISASM: Disassembly of section .text: +// DISASM-NEXT: foo: +// DISASM-NEXT: 11000: c0 03 5f d6 ret +// DISASM: bar: +// DISASM-NEXT: 11004: c0 03 5f d6 ret +// DISASM: _start: +// DISASM-NEXT: 11008: 0e 00 00 94 bl #56 +// DISASM-NEXT: 1100c: 11 00 00 94 bl #68 +// DISASM-NEXT: 11010: 42 60 05 91 add x2, x2, #344 +// DISASM-NEXT: 11014: 42 20 06 91 add x2, x2, #392 +// DISASM-NEXT: Disassembly of section .plt: +// DISASM-NEXT: .plt: +// DISASM-NEXT: 11020: f0 7b bf a9 stp x16, x30, [sp, #-16]! +// DISASM-NEXT: 11024: 10 00 00 b0 adrp x16, #4096 +// DISASM-NEXT: 11028: 11 0a 40 f9 ldr x17, [x16, #16] +// DISASM-NEXT: 1102c: 10 42 00 91 add x16, x16, #16 +// DISASM-NEXT: 11030: 20 02 1f d6 br x17 +// DISASM-NEXT: 11034: 1f 20 03 d5 nop +// DISASM-NEXT: 11038: 1f 20 03 d5 nop +// DISASM-NEXT: 1103c: 1f 20 03 d5 nop +// DISASM-NEXT: 11040: 10 00 00 b0 adrp x16, #4096 +// DISASM-NEXT: 11044: 11 0e 40 f9 ldr x17, [x16, #24] +// DISASM-NEXT: 11048: 10 62 00 91 add x16, x16, #24 +// DISASM-NEXT: 1104c: 20 02 1f d6 br x17 +// DISASM-NEXT: 11050: 10 00 00 b0 adrp x16, #4096 +// DISASM-NEXT: 11054: 11 12 40 f9 ldr x17, [x16, #32] +// DISASM-NEXT: 11058: 10 82 00 91 add x16, x16, #32 +// DISASM-NEXT: 1105c: 20 02 1f d6 br x17 + +.text +.type foo STT_GNU_IFUNC +.globl foo +.type foo, @function +foo: + ret + +.type bar STT_GNU_IFUNC +.globl bar +.type bar, @function +bar: + ret + +.globl _start +_start: + bl foo + bl bar + add x2, x2, :lo12:__rela_iplt_start + add x2, x2, :lo12:__rela_iplt_end diff --git a/test/ELF/aarch64-tls-ie.s b/test/ELF/aarch64-tls-ie.s new file mode 100644 index 000000000000..0462addba22d --- /dev/null +++ b/test/ELF/aarch64-tls-ie.s @@ -0,0 +1,49 @@ +# RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-freebsd %p/Inputs/aarch64-tls-ie.s -o %tdso.o +# RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-freebsd %s -o %tmain.o +# RUN: ld.lld -shared %tdso.o -o %tdso.so +# RUN: ld.lld %tmain.o %tdso.so -o %tout +# RUN: llvm-objdump -d %tout | FileCheck %s +# RUN: llvm-readobj -s -r %tout | FileCheck -check-prefix=RELOC %s +# REQUIRES: aarch64 + +#RELOC: Section { +#RELOC: Index: +#RELOC: Name: .got +#RELOC-NEXT: Type: SHT_PROGBITS +#RELOC-NEXT: Flags [ +#RELOC-NEXT: SHF_ALLOC +#RELOC-NEXT: SHF_WRITE +#RELOC-NEXT: ] +#RELOC-NEXT: Address: 0x120B0 +#RELOC-NEXT: Offset: 0x20B0 +#RELOC-NEXT: Size: 16 +#RELOC-NEXT: Link: 0 +#RELOC-NEXT: Info: 0 +#RELOC-NEXT: AddressAlignment: 8 +#RELOC-NEXT: EntrySize: 0 +#RELOC-NEXT: } +#RELOC: Relocations [ +#RELOC-NEXT: Section ({{.*}}) .rela.dyn { +#RELOC-NEXT: 0x120B0 R_AARCH64_TLS_TPREL64 foo 0x0 +#RELOC-NEXT: 0x120B8 R_AARCH64_TLS_TPREL64 bar 0x0 +#RELOC-NEXT: } +#RELOC-NEXT:] + +# Page(0x120B0) - Page(0x11000) = 0x1000 = 4096 +# 0x120B0 & 0xff8 = 0xB0 = 176 +# Page(0x120B8) - Page(0x11000) = 0x1000 = 4096 +# 0x120B8 & 0xff8 = 0xB8 = 184 +#CHECK: Disassembly of section .text: +#CHECK: _start: +#CHECK: 11000: 00 00 00 b0 adrp x0, #4096 +#CHECK: 11004: 00 58 40 f9 ldr x0, [x0, #176] +#CHECK: 11008: 00 00 00 b0 adrp x0, #4096 +#CHECK: 1100c: 00 5c 40 f9 ldr x0, [x0, #184] + +.globl _start +_start: + adrp x0, :gottprel:foo + ldr x0, [x0, #:gottprel_lo12:foo] + + adrp x0, :gottprel:bar + ldr x0, [x0, #:gottprel_lo12:bar] diff --git a/test/ELF/aarch64-tstbr14-reloc.s b/test/ELF/aarch64-tstbr14-reloc.s new file mode 100644 index 000000000000..1dc1bdf3c09a --- /dev/null +++ b/test/ELF/aarch64-tstbr14-reloc.s @@ -0,0 +1,96 @@ +# RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-freebsd %p/Inputs/aarch64-tstbr14-reloc.s -o %t1 +# RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-freebsd %s -o %t2 +# RUN: ld.lld %t1 %t2 -o %t +# RUN: llvm-objdump -d %t | FileCheck %s +# RUN: ld.lld -shared %t1 %t2 -o %t3 +# RUN: llvm-objdump -d %t3 | FileCheck -check-prefix=DSO %s +# RUN: llvm-readobj -s -r %t3 | FileCheck -check-prefix=DSOREL %s +# REQUIRES: aarch64 + +# 0x1101c - 28 = 0x11000 +# 0x11020 - 16 = 0x11010 +# 0x11024 - 36 = 0x11000 +# 0x11028 - 24 = 0x11010 +# CHECK: Disassembly of section .text: +# CHECK-NEXT: _foo: +# CHECK-NEXT: 11000: {{.*}} nop +# CHECK-NEXT: 11004: {{.*}} nop +# CHECK-NEXT: 11008: {{.*}} nop +# CHECK-NEXT: 1100c: {{.*}} nop +# CHECK: _bar: +# CHECK-NEXT: 11010: {{.*}} nop +# CHECK-NEXT: 11014: {{.*}} nop +# CHECK-NEXT: 11018: {{.*}} nop +# CHECK: _start: +# CHECK-NEXT: 1101c: {{.*}} tbnz w3, #15, #-28 +# CHECK-NEXT: 11020: {{.*}} tbnz w3, #15, #-16 +# CHECK-NEXT: 11024: {{.*}} tbz x6, #45, #-36 +# CHECK-NEXT: 11028: {{.*}} tbz x6, #45, #-24 + +#DSOREL: Section { +#DSOREL: Index: +#DSOREL: Name: .got.plt +#DSOREL-NEXT: Type: SHT_PROGBITS +#DSOREL-NEXT: Flags [ +#DSOREL-NEXT: SHF_ALLOC +#DSOREL-NEXT: SHF_WRITE +#DSOREL-NEXT: ] +#DSOREL-NEXT: Address: 0x3000 +#DSOREL-NEXT: Offset: 0x3000 +#DSOREL-NEXT: Size: 40 +#DSOREL-NEXT: Link: 0 +#DSOREL-NEXT: Info: 0 +#DSOREL-NEXT: AddressAlignment: 8 +#DSOREL-NEXT: EntrySize: 0 +#DSOREL-NEXT: } +#DSOREL: Relocations [ +#DSOREL-NEXT: Section ({{.*}}) .rela.plt { +#DSOREL-NEXT: 0x3018 R_AARCH64_JUMP_SLOT _foo +#DSOREL-NEXT: 0x3020 R_AARCH64_JUMP_SLOT _bar +#DSOREL-NEXT: } +#DSOREL-NEXT:] + +#DSO: Disassembly of section .text: +#DSO-NEXT: _foo: +#DSO-NEXT: 1000: {{.*}} nop +#DSO-NEXT: 1004: {{.*}} nop +#DSO-NEXT: 1008: {{.*}} nop +#DSO-NEXT: 100c: {{.*}} nop +#DSO: _bar: +#DSO-NEXT: 1010: {{.*}} nop +#DSO-NEXT: 1014: {{.*}} nop +#DSO-NEXT: 1018: {{.*}} nop +#DSO: _start: +# 0x101c + 52 = 0x1050 = PLT[1] +# 0x1020 + 64 = 0x1060 = PLT[2] +# 0x1024 + 44 = 0x1050 = PLT[1] +# 0x1028 + 56 = 0x1060 = PLT[2] +#DSO-NEXT: 101c: {{.*}} tbnz w3, #15, #52 +#DSO-NEXT: 1020: {{.*}} tbnz w3, #15, #64 +#DSO-NEXT: 1024: {{.*}} tbz x6, #45, #44 +#DSO-NEXT: 1028: {{.*}} tbz x6, #45, #56 +#DSO-NEXT: Disassembly of section .plt: +#DSO-NEXT: .plt: +#DSO-NEXT: 1030: {{.*}} stp x16, x30, [sp, #-16]! +#DSO-NEXT: 1034: {{.*}} adrp x16, #8192 +#DSO-NEXT: 1038: {{.*}} ldr x17, [x16, #16] +#DSO-NEXT: 103c: {{.*}} add x16, x16, #16 +#DSO-NEXT: 1040: {{.*}} br x17 +#DSO-NEXT: 1044: {{.*}} nop +#DSO-NEXT: 1048: {{.*}} nop +#DSO-NEXT: 104c: {{.*}} nop +#DSO-NEXT: 1050: {{.*}} adrp x16, #8192 +#DSO-NEXT: 1054: {{.*}} ldr x17, [x16, #24] +#DSO-NEXT: 1058: {{.*}} add x16, x16, #24 +#DSO-NEXT: 105c: {{.*}} br x17 +#DSO-NEXT: 1060: {{.*}} adrp x16, #8192 +#DSO-NEXT: 1064: {{.*}} ldr x17, [x16, #32] +#DSO-NEXT: 1068: {{.*}} add x16, x16, #32 +#DSO-NEXT: 106c: {{.*}} br x17 + +.globl _start +_start: + tbnz w3, #15, _foo + tbnz w3, #15, _bar + tbz x6, #45, _foo + tbz x6, #45, _bar diff --git a/test/ELF/amdgpu-entry.s b/test/ELF/amdgpu-entry.s new file mode 100644 index 000000000000..a17d243214b7 --- /dev/null +++ b/test/ELF/amdgpu-entry.s @@ -0,0 +1,16 @@ +# RUN: llvm-mc -filetype=obj -triple amdgcn--amdhsa -mcpu=kaveri %s -o %t.o +# RUN: not lld -e kernel0 -flavor gnu %t.o -o %t + +# REQUIRES: amdgpu + +.hsa_code_object_version 1,0 +.hsa_code_object_isa 7,0,0,"AMD","AMDGPU" + +.hsatext +.globl kernel0 +.align 256 +.amdgpu_hsa_kernel kernel0 +kernel0: + s_endpgm +.Lfunc_end0: + .size kernel0, .Lfunc_end0-kernel0 diff --git a/test/ELF/amdgpu-globals.s b/test/ELF/amdgpu-globals.s new file mode 100644 index 000000000000..ff0899f60a98 --- /dev/null +++ b/test/ELF/amdgpu-globals.s @@ -0,0 +1,138 @@ +# RUN: llvm-mc -filetype=obj -triple amdgcn--amdhsa -mcpu=kaveri %s -o %t.o +# RUN: lld -flavor gnu %t.o -o %t +# RUN: llvm-readobj -sections -symbols -program-headers %t | FileCheck %s + +# REQUIRES: amdgpu + + .amdgpu_hsa_module_global module_global_program + .size module_global_program, 4 + .hsadata_global_program +module_global_program: + .long 0 ; 0x0 + + .amdgpu_hsa_program_global program_global_program + .size program_global_program, 4 + .hsadata_global_program +program_global_program: + .long 0 ; 0x0 + + .amdgpu_hsa_module_global module_global_agent + .size module_global_agent, 4 + .hsadata_global_agent +module_global_agent: + .long 0 ; 0x0 + + .amdgpu_hsa_program_global program_global_agent + .size program_global_agent, 4 + .hsadata_global_agent +program_global_agent: + .long 0 ; 0x0 + + .amdgpu_hsa_module_global module_global_readonly + .size module_global_readonly, 4 + .hsatext +module_global_readonly: + .long 0 ; 0x0 + + .amdgpu_hsa_program_global program_global_readonly + .size program_global_readonly, 4 + .hsatext +program_global_readonly: + .long 0 ; 0x0 + +# CHECK: Section { +# CHECK: Name: .hsadata_global_program +# CHECK: Type: SHT_PROGBITS (0x1) +# CHECK: Flags [ (0x100003) +# CHECK: SHF_ALLOC (0x2) +# CHECK: SHF_AMDGPU_HSA_GLOBAL (0x100000) +# CHECK: SHF_WRITE (0x1) +# CHECK: ] +# CHECK: Address: [[HSADATA_GLOBAL_PROGRAM_ADDR:[0-9xa-f]+]] +# CHECK: } + +# CHECK: Section { +# CHECK: Name: .hsadata_global_agent +# CHECK: Type: SHT_PROGBITS (0x1) +# CHECK: Flags [ (0x900003) +# CHECK: SHF_ALLOC (0x2) +# CHECK: SHF_AMDGPU_HSA_AGENT (0x800000) +# CHECK: SHF_AMDGPU_HSA_GLOBAL (0x100000) +# CHECK: SHF_WRITE (0x1) +# CHECK: ] +# CHECK: } + +# CHECK: Section { +# CHECK: Name: .hsatext +# CHECK: Type: SHT_PROGBITS +# CHECK: Flags [ (0xC00007) +# CHECK: SHF_ALLOC (0x2) +# CHECK: SHF_AMDGPU_HSA_AGENT (0x800000) +# CHECK: SHF_AMDGPU_HSA_CODE (0x400000) +# CHECK: SHF_EXECINSTR (0x4) +# CHECK: SHF_WRITE (0x1) +# CHECK: ] +# CHECK: Address: [[HSATEXT_ADDR:[0-9xa-f]+]] +# CHECK: } + +# CHECK: Symbol { +# CHECK: Name: module_global_agent +# CHECK: Value: 0x0 +# CHECK: Size: 4 +# CHECK: Binding: Local +# CHECK: Section: .hsadata_global_agent +# CHECK: } + +# CHECK: Symbol { +# CHECK: Name: module_global_program +# CHECK: Value: 0x0 +# CHECK: Size: 4 +# CHECK: Binding: Local +# CHECK: Section: .hsadata_global_program +# CHECK: } + +# CHECK: Symbol { +# CHECK: Name: module_global_readonly +# CHECK: Value: 0x0 +# CHECK: Size: 4 +# CHECK: Binding: Local +# CHECK: Type: Object +# CHECK: Section: .hsatext +# CHECK: } + +# CHECK: Symbol { +# CHECK: Name: program_global_agent +# CHECK: Value: 0x4 +# CHECK: Size: 4 +# CHECK: Binding: Global +# CHECK: Type: Object +# CHECK: Section: .hsadata_global_agent +# CHECK: } + +# CHECK: Symbol { +# CHECK: Name: program_global_program +# CHECK: Value: 0x4 +# CHECK: Size: 4 +# CHECK: Binding: Global +# CHECK: Type: Object +# CHECK: Section: .hsadata_global_program +# CHECK: } + +# CHECK: Symbol { +# CHECK: Name: program_global_readonly +# CHECK: Value: 0x4 +# CHECK: Size: 4 +# CHECK: Binding: Global +# CHECK: Type: Object +# CHECK: Section: .hsatext +# CHECK: } + +# CHECK: ProgramHeader { +# CHECK: Type: PT_AMDGPU_HSA_LOAD_GLOBAL_PROGRAM +# CHECK: VirtualAddress: [[HSADATA_GLOBAL_PROGRAM_ADDR]] +# CHECK: } + +# CHECK: ProgramHeader { +# CHECK: Type: PT_AMDGPU_HSA_LOAD_CODE_AGENT +# CHECK: VirtualAddress: [[HSATEXT_ADDR]] +# CHECK: } diff --git a/test/ELF/amdgpu-kernels.s b/test/ELF/amdgpu-kernels.s new file mode 100644 index 000000000000..3f43c71f65d7 --- /dev/null +++ b/test/ELF/amdgpu-kernels.s @@ -0,0 +1,63 @@ +# RUN: llvm-mc -filetype=obj -triple amdgcn--amdhsa -mcpu=kaveri %s -o %t.o +# RUN: lld -flavor gnu %t.o -o %t +# RUN: llvm-readobj -sections -symbols -program-headers %t | FileCheck %s + +# REQUIRES: amdgpu + +.hsa_code_object_version 1,0 +.hsa_code_object_isa 7,0,0,"AMD","AMDGPU" + +.hsatext +.globl kernel0 +.align 256 +.amdgpu_hsa_kernel kernel0 +kernel0: + s_endpgm +.Lfunc_end0: + .size kernel0, .Lfunc_end0-kernel0 + +.globl kernel1 +.align 256 +.amdgpu_hsa_kernel kernel1 +kernel1: + s_endpgm + s_endpgm +.Lfunc_end1: + .size kernel1, .Lfunc_end1-kernel1 + + +# CHECK: Section { +# CHECK: Name: .hsatext +# CHECK: Type: SHT_PROGBITS +# CHECK: Flags [ (0xC00007) +# CHECK: SHF_ALLOC (0x2) +# CHECK: SHF_AMDGPU_HSA_AGENT (0x800000) +# CHECK: SHF_AMDGPU_HSA_CODE (0x400000) +# CHECK: SHF_EXECINSTR (0x4) +# CHECK: SHF_WRITE (0x1) +# CHECK: ] +# CHECK: Address: [[HSATEXT_ADDR:[0-9xa-f]+]] +# CHECK: } + +# CHECK: Symbol { +# CHECK: Name: kernel0 +# CHECK: Value: 0x0 +# CHECK: Size: 4 +# CHECK: Binding: Global +# CHECK: Type: AMDGPU_HSA_KERNEL +# CHECK: Section: .hsatext +# CHECK: } + +# CHECK: Symbol { +# CHECK: Name: kernel1 +# CHECK: Value: 0x100 +# CHECK: Size: 8 +# CHECK: Binding: Global +# CHECK: Type: AMDGPU_HSA_KERNEL +# CHECK: Section: .hsatext +# CHECK: } + +# CHECK: ProgramHeader { +# CHECK: Type: PT_AMDGPU_HSA_LOAD_CODE_AGENT +# CHECK: VirtualAddress: [[HSATEXT_ADDR]] +# CHECK: } diff --git a/test/ELF/basic-aarch64.s b/test/ELF/basic-aarch64.s index 28fb10d82edf..61b6707e49a4 100644 --- a/test/ELF/basic-aarch64.s +++ b/test/ELF/basic-aarch64.s @@ -97,7 +97,7 @@ _start: # CHECK-NEXT: } # CHECK-NEXT: Section { # CHECK-NEXT: Index: 4 -# CHECK-NEXT: Name: .strtab (17) +# CHECK-NEXT: Name: .strtab (25) # CHECK-NEXT: Type: SHT_STRTAB (0x3) # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] diff --git a/test/ELF/basic-mips.s b/test/ELF/basic-mips.s index 0c8733f8c9c4..7b2ef564f1ce 100644 --- a/test/ELF/basic-mips.s +++ b/test/ELF/basic-mips.s @@ -87,7 +87,7 @@ __start: # CHECK-NEXT: } # CHECK-NEXT: Section { # CHECK-NEXT: Index: 3 -# CHECK-NEXT: Name: .text (1) +# CHECK-NEXT: Name: .text (25) # CHECK-NEXT: Type: SHT_PROGBITS (0x1) # CHECK-NEXT: Flags [ (0x6) # CHECK-NEXT: SHF_ALLOC (0x2) @@ -119,7 +119,7 @@ __start: # CHECK-NEXT: } # CHECK-NEXT: Section { # CHECK-NEXT: Index: 5 -# CHECK-NEXT: Name: .bss (7) +# CHECK-NEXT: Name: .bss (37) # CHECK-NEXT: Type: SHT_NOBITS (0x8) # CHECK-NEXT: Flags [ (0x3) # CHECK-NEXT: SHF_ALLOC (0x2) @@ -163,7 +163,7 @@ __start: # CHECK-NEXT: } # CHECK-NEXT: Section { # CHECK-NEXT: Index: 8 -# CHECK-NEXT: Name: .strtab (46) +# CHECK-NEXT: Name: .strtab (60) # CHECK-NEXT: Type: SHT_STRTAB (0x3) # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] diff --git a/test/ELF/basic-ppc.s b/test/ELF/basic-ppc.s new file mode 100644 index 000000000000..90acd8d8ddac --- /dev/null +++ b/test/ELF/basic-ppc.s @@ -0,0 +1,296 @@ +# RUN: llvm-mc -filetype=obj -triple=powerpc-unknown-freebsd %s -o %t +# RUN: ld.lld -discard-all -shared %t -o %t2 +# RUN: llvm-readobj -file-headers -sections -section-data -program-headers %t2 | FileCheck %s +# REQUIRES: ppc + +# exits with return code 42 on FreeBSD +.text + li 0,1 + li 3,1 + sc + +// CHECK: Format: ELF32-ppc +// CHECK-NEXT: Arch: powerpc +// CHECK-NEXT: AddressSize: 32bit +// CHECK-NEXT: LoadName: +// CHECK-NEXT: ElfHeader { +// CHECK-NEXT: Ident { +// CHECK-NEXT: Magic: (7F 45 4C 46) +// CHECK-NEXT: Class: 32-bit (0x1) +// CHECK-NEXT: DataEncoding: BigEndian (0x2) +// CHECK-NEXT: FileVersion: 1 +// CHECK-NEXT: OS/ABI: FreeBSD (0x9) +// CHECK-NEXT: ABIVersion: 0 +// CHECK-NEXT: Unused: (00 00 00 00 00 00 00) +// CHECK-NEXT: } +// CHECK-NEXT: Type: SharedObject (0x3) +// CHECK-NEXT: Machine: EM_PPC (0x14) +// CHECK-NEXT: Version: 1 +// CHECK-NEXT: Entry: 0x0 +// CHECK-NEXT: ProgramHeaderOffset: 0x34 +// CHECK-NEXT: SectionHeaderOffset: 0x2084 +// CHECK-NEXT: Flags [ (0x0) +// CHECK-NEXT: ] +// CHECK-NEXT: HeaderSize: 52 +// CHECK-NEXT: ProgramHeaderEntrySize: 32 +// CHECK-NEXT: ProgramHeaderCount: 7 +// CHECK-NEXT: SectionHeaderEntrySize: 40 +// CHECK-NEXT: SectionHeaderCount: 9 +// CHECK-NEXT: StringTableSectionIndex: 7 +// CHECK-NEXT: } +// CHECK-NEXT: Sections [ +// CHECK-NEXT: Section { +// CHECK-NEXT: Index: 0 +// CHECK-NEXT: Name: (0) +// CHECK-NEXT: Type: SHT_NULL (0x0) +// CHECK-NEXT: Flags [ (0x0) +// CHECK-NEXT: ] +// CHECK-NEXT: Address: 0x0 +// CHECK-NEXT: Offset: 0x0 +// CHECK-NEXT: Size: 0 +// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 0 +// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: SectionData ( +// CHECK-NEXT: ) +// CHECK-NEXT: } +// CHECK-NEXT: Section { +// CHECK-NEXT: Index: 1 +// CHECK-NEXT: Name: .dynsym (1) +// CHECK-NEXT: Type: SHT_DYNSYM (0xB) +// CHECK-NEXT: Flags [ (0x2) +// CHECK-NEXT: SHF_ALLOC (0x2) +// CHECK-NEXT: ] +// CHECK-NEXT: Address: 0x114 +// CHECK-NEXT: Offset: 0x114 +// CHECK-NEXT: Size: 16 +// CHECK-NEXT: Link: 3 +// CHECK-NEXT: Info: 1 +// CHECK-NEXT: AddressAlignment: 4 +// CHECK-NEXT: EntrySize: 16 +// CHECK-NEXT: SectionData ( +// CHECK-NEXT: 0000: 00000000 00000000 00000000 00000000 |................| +// CHECK-NEXT: ) +// CHECK-NEXT: } +// CHECK-NEXT: Section { +// CHECK-NEXT: Index: 2 +// CHECK-NEXT: Name: .hash (9) +// CHECK-NEXT: Type: SHT_HASH (0x5) +// CHECK-NEXT: Flags [ (0x2) +// CHECK-NEXT: SHF_ALLOC (0x2) +// CHECK-NEXT: ] +// CHECK-NEXT: Address: 0x124 +// CHECK-NEXT: Offset: 0x124 +// CHECK-NEXT: Size: 16 +// CHECK-NEXT: Link: 1 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 4 +// CHECK-NEXT: EntrySize: 4 +// CHECK-NEXT: SectionData ( +// CHECK-NEXT: 0000: 00000001 00000001 00000000 00000000 |................| +// CHECK-NEXT: ) +// CHECK-NEXT: } +// CHECK-NEXT: Section { +// CHECK-NEXT: Index: 3 +// CHECK-NEXT: Name: .dynstr (15) +// CHECK-NEXT: Type: SHT_STRTAB (0x3) +// CHECK-NEXT: Flags [ (0x2) +// CHECK-NEXT: SHF_ALLOC (0x2) +// CHECK-NEXT: ] +// CHECK-NEXT: Address: 0x134 +// CHECK-NEXT: Offset: 0x134 +// CHECK-NEXT: Size: 1 +// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 1 +// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: SectionData ( +// CHECK-NEXT: 0000: 00 |.| +// CHECK-NEXT: ) +// CHECK-NEXT: } +// CHECK-NEXT: Section { +// CHECK-NEXT: Index: 4 +// CHECK-NEXT: Name: .text (23) +// CHECK-NEXT: Type: SHT_PROGBITS (0x1) +// CHECK-NEXT: Flags [ (0x6) +// CHECK-NEXT: SHF_ALLOC (0x2) +// CHECK-NEXT: SHF_EXECINSTR (0x4) +// CHECK-NEXT: ] +// CHECK-NEXT: Address: 0x1000 +// CHECK-NEXT: Offset: 0x1000 +// CHECK-NEXT: Size: 12 +// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 4 +// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: SectionData ( +// CHECK-NEXT: 0000: 38000001 38600001 44000002 |8...8`..D...| +// CHECK-NEXT: ) +// CHECK-NEXT: } +// CHECK-NEXT: Section { +// CHECK-NEXT: Index: 5 +// CHECK-NEXT: Name: .dynamic (29) +// CHECK-NEXT: Type: SHT_DYNAMIC (0x6) +// CHECK-NEXT: Flags [ (0x3) +// CHECK-NEXT: SHF_ALLOC (0x2) +// CHECK-NEXT: SHF_WRITE (0x1) +// CHECK-NEXT: ] +// CHECK-NEXT: Address: 0x2000 +// CHECK-NEXT: Offset: 0x2000 +// CHECK-NEXT: Size: 48 +// CHECK-NEXT: Link: 3 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 4 +// CHECK-NEXT: EntrySize: 8 +// CHECK-NEXT: SectionData ( +// CHECK-NEXT: 0000: 00000006 00000114 0000000B 00000010 |................| +// CHECK-NEXT: 0010: 00000005 00000134 0000000A 00000001 |.......4........| +// CHECK-NEXT: 0020: 00000004 00000124 00000000 00000000 |.......$........| +// CHECK-NEXT: ) +// CHECK-NEXT: } +// CHECK-NEXT: Section { +// CHECK-NEXT: Index: 6 +// CHECK-NEXT: Name: .symtab (38) +// CHECK-NEXT: Type: SHT_SYMTAB (0x2) +// CHECK-NEXT: Flags [ (0x0) +// CHECK-NEXT: ] +// CHECK-NEXT: Address: 0x0 +// CHECK-NEXT: Offset: 0x2030 +// CHECK-NEXT: Size: 16 +// CHECK-NEXT: Link: 8 +// CHECK-NEXT: Info: 1 +// CHECK-NEXT: AddressAlignment: 4 +// CHECK-NEXT: EntrySize: 16 +// CHECK-NEXT: SectionData ( +// CHECK-NEXT: 0000: 00000000 00000000 00000000 00000000 |................| +// CHECK-NEXT: ) +// CHECK-NEXT: } +// CHECK-NEXT: Section { +// CHECK-NEXT: Index: 7 +// CHECK-NEXT: Name: .shstrtab (46) +// CHECK-NEXT: Type: SHT_STRTAB (0x3) +// CHECK-NEXT: Flags [ (0x0) +// CHECK-NEXT: ] +// CHECK-NEXT: Address: 0x0 +// CHECK-NEXT: Offset: 0x2040 +// CHECK-NEXT: Size: 64 +// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 1 +// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: SectionData ( +// CHECK-NEXT: 0000: 002E6479 6E73796D 002E6861 7368002E |..dynsym..hash..| +// CHECK-NEXT: 0010: 64796E73 7472002E 74657874 002E6479 |dynstr..text..dy| +// CHECK-NEXT: 0020: 6E616D69 63002E73 796D7461 62002E73 |namic..symtab..s| +// CHECK-NEXT: 0030: 68737472 74616200 2E737472 74616200 |hstrtab..strtab.| +// CHECK-NEXT: ) +// CHECK-NEXT: } +// CHECK-NEXT: Section { +// CHECK-NEXT: Index: 8 +// CHECK-NEXT: Name: .strtab (56) +// CHECK-NEXT: Type: SHT_STRTAB (0x3) +// CHECK-NEXT: Flags [ (0x0) +// CHECK-NEXT: ] +// CHECK-NEXT: Address: 0x0 +// CHECK-NEXT: Offset: 0x2080 +// CHECK-NEXT: Size: 1 +// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 1 +// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: SectionData ( +// CHECK-NEXT: 0000: 00 |.| +// CHECK-NEXT: ) +// CHECK-NEXT: } +// CHECK-NEXT: ] +// CHECK-NEXT: ProgramHeaders [ +// CHECK-NEXT: ProgramHeader { +// CHECK-NEXT: Type: PT_PHDR (0x6) +// CHECK-NEXT: Offset: 0x34 +// CHECK-NEXT: VirtualAddress: 0x34 +// CHECK-NEXT: PhysicalAddress: 0x34 +// CHECK-NEXT: FileSize: 224 +// CHECK-NEXT: MemSize: 224 +// CHECK-NEXT: Flags [ (0x4) +// CHECK-NEXT: PF_R (0x4) +// CHECK-NEXT: ] +// CHECK-NEXT: Alignment: 8 +// CHECK-NEXT: } +// CHECK-NEXT: ProgramHeader { +// CHECK-NEXT: Type: PT_LOAD (0x1) +// CHECK-NEXT: Offset: 0x0 +// CHECK-NEXT: VirtualAddress: 0x0 +// CHECK-NEXT: PhysicalAddress: 0x0 +// CHECK-NEXT: FileSize: 309 +// CHECK-NEXT: MemSize: 309 +// CHECK-NEXT: Flags [ (0x4) +// CHECK-NEXT: PF_R (0x4) +// CHECK-NEXT: ] +// CHECK-NEXT: Alignment: 4096 +// CHECK-NEXT: } +// CHECK-NEXT: ProgramHeader { +// CHECK-NEXT: Type: PT_LOAD (0x1) +// CHECK-NEXT: Offset: 0x1000 +// CHECK-NEXT: VirtualAddress: 0x1000 +// CHECK-NEXT: PhysicalAddress: 0x1000 +// CHECK-NEXT: FileSize: 12 +// CHECK-NEXT: MemSize: 12 +// CHECK-NEXT: Flags [ (0x5) +// CHECK-NEXT: PF_R (0x4) +// CHECK-NEXT: PF_X (0x1) +// CHECK-NEXT: ] +// CHECK-NEXT: Alignment: 4096 +// CHECK-NEXT: } +// CHECK-NEXT: ProgramHeader { +// CHECK-NEXT: Type: PT_LOAD (0x1) +// CHECK-NEXT: Offset: 0x2000 +// CHECK-NEXT: VirtualAddress: 0x2000 +// CHECK-NEXT: PhysicalAddress: 0x2000 +// CHECK-NEXT: FileSize: 48 +// CHECK-NEXT: MemSize: 48 +// CHECK-NEXT: Flags [ (0x6) +// CHECK-NEXT: PF_R (0x4) +// CHECK-NEXT: PF_W (0x2) +// CHECK-NEXT: ] +// CHECK-NEXT: Alignment: 4096 +// CHECK-NEXT: } +// CHECK-NEXT: ProgramHeader { +// CHECK-NEXT: Type: PT_DYNAMIC (0x2) +// CHECK-NEXT: Offset: 0x2000 +// CHECK-NEXT: VirtualAddress: 0x2000 +// CHECK-NEXT: PhysicalAddress: 0x2000 +// CHECK-NEXT: FileSize: 48 +// CHECK-NEXT: MemSize: 48 +// CHECK-NEXT: Flags [ (0x6) +// CHECK-NEXT: PF_R (0x4) +// CHECK-NEXT: PF_W (0x2) +// CHECK-NEXT: ] +// CHECK-NEXT: Alignment: 4 +// CHECK-NEXT: } +// CHECK-NEXT: ProgramHeader { +// CHECK-NEXT: Type: PT_GNU_RELRO (0x6474E552) +// CHECK-NEXT: Offset: 0x2000 +// CHECK-NEXT: VirtualAddress: 0x2000 +// CHECK-NEXT: PhysicalAddress: 0x2000 +// CHECK-NEXT: FileSize: 48 +// CHECK-NEXT: MemSize: 48 +// CHECK-NEXT: Flags [ (0x4) +// CHECK-NEXT: PF_R (0x4) +// CHECK-NEXT: ] +// CHECK-NEXT: Alignment: 1 +// CHECK-NEXT: } +// CHECK-NEXT: ProgramHeader { +// CHECK-NEXT: Type: PT_GNU_STACK (0x6474E551) +// CHECK-NEXT: Offset: 0x0 +// CHECK-NEXT: VirtualAddress: 0x0 +// CHECK-NEXT: PhysicalAddress: 0x0 +// CHECK-NEXT: FileSize: 0 +// CHECK-NEXT: MemSize: 0 +// CHECK-NEXT: Flags [ (0x6) +// CHECK-NEXT: PF_R (0x4) +// CHECK-NEXT: PF_W (0x2) +// CHECK-NEXT: ] +// CHECK-NEXT: Alignment: 0 +// CHECK-NEXT: } +// CHECK-NEXT: ] diff --git a/test/ELF/basic.s b/test/ELF/basic.s index 47b28d41b5bb..bbc674ced2ed 100644 --- a/test/ELF/basic.s +++ b/test/ELF/basic.s @@ -98,7 +98,7 @@ _start: # CHECK-NEXT: } # CHECK-NEXT: Section { # CHECK-NEXT: Index: 4 -# CHECK-NEXT: Name: .strtab (17) +# CHECK-NEXT: Name: .strtab (25) # CHECK-NEXT: Type: SHT_STRTAB (0x3) # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] diff --git a/test/ELF/basic32.s b/test/ELF/basic32.s index e5b5c359d59f..f4f9c410a048 100644 --- a/test/ELF/basic32.s +++ b/test/ELF/basic32.s @@ -96,7 +96,7 @@ _start: # CHECK-NEXT: } # CHECK-NEXT: Section { # CHECK-NEXT: Index: 4 -# CHECK-NEXT: Name: .strtab (17) +# CHECK-NEXT: Name: .strtab (25) # CHECK-NEXT: Type: SHT_STRTAB (0x3) # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] diff --git a/test/ELF/basic64be.s b/test/ELF/basic64be.s index 9534e05b47e0..32d8974dae01 100644 --- a/test/ELF/basic64be.s +++ b/test/ELF/basic64be.s @@ -177,7 +177,7 @@ _start: # CHECK-NEXT: } # CHECK-NEXT: Section { # CHECK-NEXT: Index: 7 -# CHECK-NEXT: Name: .strtab (27) +# CHECK-NEXT: Name: .strtab (41) # CHECK-NEXT: Type: SHT_STRTAB (0x3) # CHECK-NEXT: Flags [ (0x0) # CHECK-NEXT: ] @@ -257,4 +257,4 @@ _start: # CHECK-NEXT: ] # CHECK-NEXT: Alignment: 0 # CHECK-NEXT: } -# CHECK-NEXT: ]
\ No newline at end of file +# CHECK-NEXT: ] diff --git a/test/ELF/discard-none.s b/test/ELF/discard-none.s index a9d54bae9ace..c13b544f514d 100644 --- a/test/ELF/discard-none.s +++ b/test/ELF/discard-none.s @@ -20,8 +20,8 @@ // CHECK-NEXT: AddressAlignment: // CHECK-NEXT: EntrySize: // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 002E4C6D 79766172 002E4C6D 796F7468 |..Lmyvar..Lmyoth| -// CHECK-NEXT: 0010: 65727661 7200 |ervar.| +// CHECK-NEXT: 0000: 002E4C6D 796F7468 65727661 72002E4C |..Lmyothervar..L| +// CHECK-NEXT: 0010: 6D797661 7200 |myvar.| // CHECK-NEXT: ) // CHECK-NEXT: } diff --git a/test/ELF/linkerscript-sections.s b/test/ELF/linkerscript-sections.s index ea9ae2b2726d..165ec335ec13 100644 --- a/test/ELF/linkerscript-sections.s +++ b/test/ELF/linkerscript-sections.s @@ -22,7 +22,7 @@ # SEC-DEFAULT: 4 .bss 00000002 {{[0-9a-f]*}} BSS # SEC-DEFAULT: 5 .shstrtab 00000002 {{[0-9a-f]*}} # SEC-DEFAULT: 6 .symtab 00000030 {{[0-9a-f]*}} -# SEC-DEFAULT: 7 .shstrtab 00000032 {{[0-9a-f]*}} +# SEC-DEFAULT: 7 .shstrtab 0000003c {{[0-9a-f]*}} # SEC-DEFAULT: 8 .strtab 00000008 {{[0-9a-f]*}} # Sections are put in order specified in linker script. @@ -42,7 +42,7 @@ # SEC-ORDER: 1 .bss 00000002 {{[0-9a-f]*}} BSS # SEC-ORDER: 2 other 00000003 {{[0-9a-f]*}} DATA # SEC-ORDER: 3 .shstrtab 00000002 {{[0-9a-f]*}} -# SEC-ORDER: 4 .shstrtab 00000032 {{[0-9a-f]*}} +# SEC-ORDER: 4 .shstrtab 0000003c {{[0-9a-f]*}} # SEC-ORDER: 5 .symtab 00000030 {{[0-9a-f]*}} # SEC-ORDER: 6 .strtab 00000008 {{[0-9a-f]*}} # SEC-ORDER: 7 .data 00000020 {{[0-9a-f]*}} DATA @@ -63,7 +63,7 @@ # SEC-SWAP-NAMES: 4 .bss 00000002 {{[0-9a-f]*}} BSS # SEC-SWAP-NAMES: 5 .shstrtab 00000002 {{[0-9a-f]*}} # SEC-SWAP-NAMES: 6 .symtab 00000030 {{[0-9a-f]*}} -# SEC-SWAP-NAMES: 7 .shstrtab 00000032 {{[0-9a-f]*}} +# SEC-SWAP-NAMES: 7 .shstrtab 0000003c {{[0-9a-f]*}} # SEC-SWAP-NAMES: 8 .strtab 00000008 {{[0-9a-f]*}} # .shstrtab from the input object file is discarded. @@ -100,7 +100,7 @@ # SEC-MULTI: 3 .bss 00000002 {{[0-9a-f]*}} BSS # SEC-MULTI: 4 .shstrtab 00000002 {{[0-9a-f]*}} # SEC-MULTI: 5 .symtab 00000030 {{[0-9a-f]*}} -# SEC-MULTI: 6 .shstrtab 0000002c {{[0-9a-f]*}} +# SEC-MULTI: 6 .shstrtab 00000036 {{[0-9a-f]*}} # SEC-MULTI: 7 .strtab 00000008 {{[0-9a-f]*}} .globl _start; diff --git a/test/ELF/mips-gp-disp.s b/test/ELF/mips-gp-disp.s new file mode 100644 index 000000000000..a08829c18bd4 --- /dev/null +++ b/test/ELF/mips-gp-disp.s @@ -0,0 +1,34 @@ +# Check that even if _gp_disp symbol is defined in the shared library +# we use our own value. + +# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o +# RUN: ld.lld -shared -o %t.so %t.o %S/Inputs/mips-gp-disp.so +# RUN: llvm-readobj -symbols %t.so | FileCheck -check-prefix=INT-SO %s +# RUN: llvm-readobj -symbols %S/Inputs/mips-gp-disp.so \ +# RUN: | FileCheck -check-prefix=EXT-SO %s +# RUN: llvm-objdump -d -t %t.so | FileCheck -check-prefix=DIS %s +# RUN: llvm-readobj -relocations %t.so | FileCheck -check-prefix=REL %s + +# REQUIRES: mips + +# INT-SO-NOT: Name: _gp_disp + +# EXT-SO: Name: _gp_disp +# EXT-SO-NEXT: Value: 0x20010 + +# DIS: Disassembly of section .text: +# DIS-NEXT: __start: +# DIS-NEXT: 10000: 3c 08 00 01 lui $8, 1 +# DIS-NEXT: 10004: 21 08 7f f0 addi $8, $8, 32752 +# ^-- 0x37ff0 & 0xffff +# DIS: 00027ff0 *ABS* 00000000 _gp + +# REL: Relocations [ +# REL-NEXT: ] + + .text + .globl __start +__start: + lui $t0,%hi(_gp_disp) + addi $t0,$t0,%lo(_gp_disp) + lw $v0,%call16(_foo)($gp) diff --git a/test/ELF/ppc-relocs.s b/test/ELF/ppc-relocs.s new file mode 100644 index 000000000000..a70cac1615e0 --- /dev/null +++ b/test/ELF/ppc-relocs.s @@ -0,0 +1,30 @@ +# RUN: llvm-mc -filetype=obj -triple=powerpc-unknown-freebsd %s -o %t +# RUN: ld.lld %t -o %t2 +# RUN: llvm-objdump -d %t2 | FileCheck %s +# REQUIRES: ppc + +.section .R_PPC_ADDR16_HA,"ax",@progbits +.globl _start +_start: + lis 4, msg@ha +msg: + .string "foo" + len = . - msg + +# CHECK: Disassembly of section .R_PPC_ADDR16_HA: +# CHECK: _start: +# CHECK: 11000: 3c 80 00 01 lis 4, 1 +# CHECK: msg: +# CHECK: 11004: 66 6f 6f 00 oris 15, 19, 28416 + +.section .R_PPC_ADDR16_LO,"ax",@progbits + addi 4, 4, msg@l +mystr: + .asciz "blah" + len = . - mystr + +# CHECK: Disassembly of section .R_PPC_ADDR16_LO: +# CHECK: .R_PPC_ADDR16_LO: +# CHECK: 11008: 38 84 10 04 addi 4, 4, 4100 +# CHECK: mystr: +# CHECK: 1100c: 62 6c 61 68 ori 12, 19, 24936 diff --git a/test/ELF/relocation-copy.s b/test/ELF/relocation-copy.s index 85cbf673910a..2e958ad5e955 100644 --- a/test/ELF/relocation-copy.s +++ b/test/ELF/relocation-copy.s @@ -2,18 +2,19 @@ // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/relocation-copy.s -o %t2.o // RUN: ld.lld -shared %t2.o -o %t.so -// RUN: ld.lld -e main %t.o %t.so -o %t3 +// RUN: ld.lld %t.o %t.so -o %t3 // RUN: llvm-readobj -s -r --expand-relocs %t3 | FileCheck %s // RUN: llvm-objdump -d %t3 | FileCheck -check-prefix=CODE %s .text -.globl main -.align 16, 0x90 -.type main,@function -main: +.global _start +_start: movl $5, x movl $7, y movl $9, z +movl $x, %edx +movl $y, %edx +movl $z, %edx // CHECK: Name: .bss // CHECK-NEXT: Type: SHT_NOBITS (0x8) @@ -57,7 +58,10 @@ movl $9, z // 77840 = 0x13000 + 16 // 77844 = 0x13000 + 16 + 4 // CODE: Disassembly of section .text: -// CODE-NEXT: main: +// CODE-NEXT: _start: // CODE-NEXT: 11000: c7 04 25 00 30 01 00 05 00 00 00 movl $5, 77824 // CODE-NEXT: 1100b: c7 04 25 10 30 01 00 07 00 00 00 movl $7, 77840 // CODE-NEXT: 11016: c7 04 25 14 30 01 00 09 00 00 00 movl $9, 77844 +// CODE-NEXT: 11021: ba 00 30 01 00 movl $77824, %edx +// CODE-NEXT: 11026: ba 10 30 01 00 movl $77840, %edx +// CODE-NEXT: 1102b: ba 14 30 01 00 movl $77844, %edx diff --git a/test/ELF/string-table.s b/test/ELF/string-table.s index 52a40d790d8f..8393d6de6cc5 100644 --- a/test/ELF/string-table.s +++ b/test/ELF/string-table.s @@ -58,9 +58,10 @@ _start: // CHECK-NEXT: AddressAlignment: 1 // CHECK-NEXT: EntrySize: 0 // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 002E7465 78740066 6F6F6261 72002E73 |..text.foobar..s| -// CHECK-NEXT: 0010: 68737472 74616200 2E737472 74616200 |hstrtab..strtab.| -// CHECK-NEXT: 0020: 2E73796D 74616200 |.symtab.| +// CHECK-NEXT: 0000: 00626172 002E7465 78740066 6F6F6261 |.bar..text.fooba| +// CHECK-NEXT: 0010: 7200666F 6F626172 00666F6F 62617200 |r.foobar.foobar.| +// CHECK-NEXT: 0020: 2E73796D 74616200 2E736873 74727461 |.symtab..shstrta| +// CHECK-NEXT: 0030: 62002E73 74727461 6200 |b..strtab.| // CHECK-NEXT: ) // CHECK-NEXT:} // CHECK: Name: .strtab @@ -75,6 +76,6 @@ _start: // CHECK-NEXT: AddressAlignment: 1 // CHECK-NEXT: EntrySize: 0 // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 005F7374 61727400 666F6F62 617200 |._start.foobar.| +// CHECK-NEXT: 0000: 00666F6F 62617200 5F737461 727400 |.foobar._start.| // CHECK-NEXT: ) // CHECK-NEXT: } diff --git a/test/ELF/wrap.s b/test/ELF/wrap.s new file mode 100644 index 000000000000..17aac2db6e18 --- /dev/null +++ b/test/ELF/wrap.s @@ -0,0 +1,19 @@ +// REQUIRES: x86 +// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t +// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/wrap.s -o %t2 + +// RUN: ld.lld -o %t3 %t %t2 -wrap foo -wrap nosuchsym +// RUN: llvm-objdump -d -print-imm-hex %t3 | FileCheck %s +// RUN: ld.lld -o %t3 %t %t2 --wrap foo -wrap=nosuchsym +// RUN: llvm-objdump -d -print-imm-hex %t3 | FileCheck %s + +// CHECK: _start: +// CHECK-NEXT: movl $0x11010, %edx +// CHECK-NEXT: movl $0x11010, %edx +// CHECK-NEXT: movl $0x11000, %edx + +.global _start +_start: + movl $foo, %edx + movl $__wrap_foo, %edx + movl $__real_foo, %edx |