diff options
Diffstat (limited to 'test')
32 files changed, 1362 insertions, 102 deletions
diff --git a/test/COFF/export.test b/test/COFF/export.test index a3ea0ab9bca2..20e069ec3c83 100644 --- a/test/COFF/export.test +++ b/test/COFF/export.test @@ -80,3 +80,14 @@ SYMTAB: __imp_exportfn2 in export.test.tmp.DLL SYMTAB: exportfn2 in export.test.tmp.DLL SYMTAB: __imp_exportfn3 in export.test.tmp.DLL SYMTAB: exportfn3 in export.test.tmp.DLL + +# RUN: lld-link /out:%t.dll /dll %t.obj /export:foo=kernel32.foobar +# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=FORWARDER %s + +FORWARDER: Export Table: +FORWARDER: DLL name: export.test.tmp.dll +FORWARDER: Ordinal base: 0 +FORWARDER: Ordinal RVA Name +FORWARDER: 0 0 +FORWARDER: 1 0x1010 exportfn +FORWARDER: 2 foo (forwarded to kernel32.foobar) 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 diff --git a/test/lit.cfg b/test/lit.cfg index 54e8c7f546f8..d8794039f152 100644 --- a/test/lit.cfg +++ b/test/lit.cfg @@ -227,6 +227,8 @@ if re.search(r'X86', archs): config.available_features.add('x86') if re.search(r'PowerPC', archs): config.available_features.add('ppc') +if re.search(r'AMDGPU', archs): + config.available_features.add('amdgpu') llvm_config_cmd.wait() # Check if Windows resource file compiler exists. diff --git a/test/mach-o/arm64-reloc-negDelta32-fixup.yaml b/test/mach-o/arm64-reloc-negDelta32-fixup.yaml index 8beab2841dc3..4da88097eb60 100644 --- a/test/mach-o/arm64-reloc-negDelta32-fixup.yaml +++ b/test/mach-o/arm64-reloc-negDelta32-fixup.yaml @@ -7,7 +7,7 @@ # We don't emit these in to the binary as relocations, so we need to # make sure that the offset in the FDE to the CIE is the correct value. # CHECK: {{[0-9abcdef]*}} 10000000 00000000 017a5200 01781e01 -# CHECK: {{[0-9abcdef]*}} 100c1f00 20000000 18000000 e4ffffff +# CHECK: {{[0-9abcdef]*}} 100c1f00 20000000 18000000 b8ffffff # Note, this one that matters ^~~~~~~~ # It needs to be 0x18 as that is the offset back to 0 where the CIE is. # CHECK: {{[0-9abcdef]*}} ffffffff 20000000 00000000 00480e10 @@ -84,7 +84,7 @@ sections: content: [ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7A, 0x52, 0x00, 0x01, 0x78, 0x1E, 0x01, 0x10, 0x0C, 0x1F, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0xFF, + 0x18, 0x00, 0x00, 0x00, 0x94, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x0E, 0x10, 0x9E, 0x01, 0x9D, 0x02, 0x00, 0x00, 0x00, 0x00 ] diff --git a/test/mach-o/do-not-emit-unwind-fde-arm64.yaml b/test/mach-o/do-not-emit-unwind-fde-arm64.yaml new file mode 100644 index 000000000000..d306419bc5f9 --- /dev/null +++ b/test/mach-o/do-not-emit-unwind-fde-arm64.yaml @@ -0,0 +1,208 @@ +# RUN: lld -flavor darwin -arch arm64 -r -print_atoms %s -o %t | FileCheck %s +# RUN: lld -flavor darwin -arch arm64 -r -print_atoms %t -o %t2 | FileCheck %s +# RUN: llvm-objdump -r -s -section="__eh_frame" -macho %t | FileCheck -check-prefix=CODE %s +# RUN: llvm-objdump -r -s -section="__eh_frame" -macho %t2 | FileCheck -check-prefix=CODE %s + + +--- !mach-o +arch: arm64 +file-type: MH_OBJECT +flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ] +compat-version: 0.0 +current-version: 0.0 +has-UUID: false +OS: unknown +sections: + - segment: __TEXT + section: __text + type: S_REGULAR + attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ] + alignment: 4 + address: 0x0000000000000000 + content: [ 0xFD, 0x7B, 0xBF, 0xA9, 0xFD, 0x03, 0x00, 0x91, + 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x91, + 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x80, 0x52, + 0xFD, 0x7B, 0xC1, 0xA8, 0xC0, 0x03, 0x5F, 0xD6 ] + relocations: + - offset: 0x00000010 + type: ARM64_RELOC_BRANCH26 + length: 2 + pc-rel: true + extern: true + symbol: 9 + - offset: 0x0000000C + type: ARM64_RELOC_PAGEOFF12 + length: 2 + pc-rel: false + extern: true + symbol: 1 + - offset: 0x00000008 + type: ARM64_RELOC_PAGE21 + length: 2 + pc-rel: true + extern: true + symbol: 1 + - segment: __TEXT + section: __cstring + type: S_CSTRING_LITERALS + attributes: [ ] + address: 0x0000000000000020 + content: [ 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F, + 0x72, 0x6C, 0x64, 0x00 ] + - segment: __LD + section: __compact_unwind + type: S_REGULAR + attributes: [ ] + alignment: 8 + address: 0x0000000000000030 + content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ] + relocations: + - offset: 0x00000000 + type: ARM64_RELOC_UNSIGNED + length: 3 + pc-rel: false + extern: false + symbol: 1 + - segment: __TEXT + section: __eh_frame + type: S_COALESCED + attributes: [ ] + alignment: 8 + address: 0x0000000000000050 + content: [ 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x7A, 0x50, 0x4C, 0x52, 0x00, 0x01, 0x78, + 0x1E, 0x0B, 0x00, 0xED, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0x10, 0x0C, 0x1F, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x88, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x48, 0x0E, 0x10, 0x9E, 0x01, 0x9D, 0x02 ] + - segment: __TEXT + section: __gcc_except_tab + type: S_REGULAR + attributes: [ ] + address: 0x00000000000000A0 + content: [ 0x00, 0x00, 0x00, 0x00 ] +local-symbols: + - name: ltmp0 + type: N_SECT + sect: 1 + value: 0x0000000000000000 + - name: L_str + type: N_SECT + sect: 2 + value: 0x0000000000000020 + - name: ltmp1 + type: N_SECT + sect: 2 + value: 0x0000000000000020 + - name: ltmp2 + type: N_SECT + sect: 3 + value: 0x0000000000000030 + - name: ltmp3 + type: N_SECT + sect: 4 + value: 0x0000000000000050 + - name: ltmp4 + type: N_SECT + sect: 4 + value: 0x0000000000000070 +global-symbols: + - name: __Z3fooi + type: N_SECT + scope: [ N_EXT ] + sect: 1 + value: 0x0000000000000000 +undefined-symbols: + - name: __gxx_personality_v0 + type: N_UNDF + scope: [ N_EXT ] + value: 0x0000000000000000 + - name: _bar + type: N_UNDF + scope: [ N_EXT ] + value: 0x0000000000000000 + - name: _puts + type: N_UNDF + scope: [ N_EXT ] + value: 0x0000000000000000 +page-size: 0x00000000 + +# CHECK: defined-atoms: +# CHECK: - ref-name: L{{[0-9]*}} +# CHECK: scope: hidden +# CHECK: type: c-string +# CHECK: content: [ 48, 65, 6C, 6C, 6F, 20, 77, 6F, 72, 6C, 64, 00 ] +# CHECK: merge: by-content +# CHECK: - ref-name: L{{[0-9]*}} +# CHECK: type: unwind-cfi +# CHECK: content: [ 1C, 00, 00, 00, 00, 00, 00, 00, 01, 7A, 50, 4C, +# CHECK: 52, 00, 01, 78, 1E, 0B, 00, ED, FF, FF, FF, FF, +# CHECK: FF, FF, FF, 00, 10, 0C, 1F, 00 ] +# CHECK: - type: unwind-cfi +# CHECK: content: [ 24, 00, 00, 00, 24, 00, 00, 00, {{..}}, {{..}}, {{..}}, {{..}}, +# CHECK: {{..}}, {{..}}, {{..}}, {{..}}, 20, 00, 00, 00, 00, 00, 00, 00, +# CHECK: 08, {{..}}, {{..}}, {{..}}, {{..}}, {{..}}, {{..}}, {{..}}, {{..}}, 48, 0E, 10, +# CHECK: 9E, 01, 9D, 02 ] +# CHECK: references: +# CHECK: - kind: negDelta32 +# CHECK: offset: 4 +# CHECK: target: L{{[0-9]*}} +# CHECK: - kind: unwindFDEToFunction +# CHECK: offset: 8 +# CHECK: target: __Z3fooi +# CHECK: - kind: unwindFDEToFunction +# CHECK: offset: 25 +# CHECK: target: L{{[0-9]*}} +# CHECK: - ref-name: L{{[0-9]*}} +# CHECK: type: unwind-lsda +# CHECK: content: [ 00, 00, 00, 00 ] +# CHECK: - type: compact-unwind +# CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00, 20, 00, 00, 00, +# CHECK: 00, 00, 00, 03, 00, 00, 00, 00, 00, 00, 00, 00, +# CHECK: 00, 00, 00, 00, 00, 00, 00, 00 ] +# CHECK: alignment: 8 +# CHECK: references: +# CHECK: - kind: pointer64 +# CHECK: offset: 0 +# CHECK: target: __Z3fooi +# CHECK: - name: __Z3fooi +# CHECK: scope: global +# CHECK: content: [ FD, 7B, BF, A9, FD, 03, 00, 91, 00, 00, 00, 90, +# CHECK: 00, 00, 00, 91, 00, 00, 00, 94, 00, 00, 80, 52, +# CHECK: FD, 7B, C1, A8, C0, 03, 5F, D6 ] +# CHECK: alignment: 4 +# CHECK: references: +# CHECK: - kind: page21 +# CHECK: offset: 8 +# CHECK: target: L{{[0-9]*}} +# CHECK: - kind: offset12 +# CHECK: offset: 12 +# CHECK: target: L{{[0-9]*}} +# CHECK: - kind: branch26 +# CHECK: offset: 16 +# CHECK: target: _puts + +# Make sure we don't have any relocations in the __eh_frame section +# CODE-NOT: RELOCATION RECORDS FOR [__eh_frame] + +# Also make sure the reloc for the FDE->function is the correct offset +# It should be the offset from the fixup location back to the address +# of the function we are referencing +# CODE: Contents of section __eh_frame: +# This is the CIE: +# CODE-NEXT: {{[0-9abcdef]*}} 1c000000 00000000 017a504c 52000178 +# CODE-NEXT: {{[0-9abcdef]*}} 1e0b00ed ffffffff ffffff00 100c1f00 +# This is the FDE: +# CODE-NEXT: {{[0-9abcdef]*}} 24000000 24000000 a8ffffff ffffffff +# This is the important offset for FDE->func ^~~~~~~~ ~~~~~~~~ + +# CODE-NEXT: {{[0-9abcdef]*}} 20000000 00000000 08c3ffff ffffffff +# And this is the offset for FDE->lsda ^~~~~~~~ ~~~~~~ +# CODE-NEXT: {{[0-9abcdef]*}} ff480e10 9e019d02 +# And this byte ^~ diff --git a/test/mach-o/parse-data-relocs-arm64.yaml b/test/mach-o/parse-data-relocs-arm64.yaml index d02422f6a6f9..0edd64689b2e 100644 --- a/test/mach-o/parse-data-relocs-arm64.yaml +++ b/test/mach-o/parse-data-relocs-arm64.yaml @@ -16,11 +16,18 @@ arch: arm64 file-type: MH_OBJECT flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ] sections: + - segment: __TEXT + section: __text + type: S_REGULAR + attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ] + alignment: 4 + address: 0x0000000000000000 + content: [ 0xC0, 0x03, 0x5F, 0xD6 ] - segment: __DATA section: __data type: S_REGULAR attributes: [ ] - address: 0x0000000000000000 + address: 0x0000000000000004 content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -28,7 +35,7 @@ sections: 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xBE, 0xFF, 0xFF, 0xFF, 0xB0, 0xFF, 0xFF, 0xFF ] @@ -38,107 +45,114 @@ sections: length: 2 pc-rel: true extern: true - symbol: 1 + symbol: 2 - offset: 0x0000004C type: ARM64_RELOC_SUBTRACTOR length: 2 pc-rel: false extern: true - symbol: 1 + symbol: 2 - offset: 0x0000004C type: ARM64_RELOC_UNSIGNED length: 2 pc-rel: false extern: true - symbol: 1 + symbol: 2 - offset: 0x00000048 type: ARM64_RELOC_SUBTRACTOR length: 2 pc-rel: false extern: true - symbol: 1 + symbol: 2 - offset: 0x00000048 type: ARM64_RELOC_UNSIGNED length: 2 pc-rel: false extern: true - symbol: 1 + symbol: 2 - offset: 0x00000040 type: ARM64_RELOC_UNSIGNED length: 3 pc-rel: false extern: true - symbol: 1 + symbol: 2 - offset: 0x00000038 type: ARM64_RELOC_UNSIGNED length: 3 pc-rel: false extern: false - symbol: 1 + symbol: 2 - offset: 0x00000030 type: ARM64_RELOC_SUBTRACTOR length: 3 pc-rel: false extern: true - symbol: 1 + symbol: 2 - offset: 0x00000030 type: ARM64_RELOC_UNSIGNED length: 3 pc-rel: false extern: true - symbol: 1 + symbol: 2 - offset: 0x00000028 type: ARM64_RELOC_SUBTRACTOR length: 3 pc-rel: false extern: true - symbol: 1 + symbol: 2 - offset: 0x00000028 type: ARM64_RELOC_UNSIGNED length: 3 pc-rel: false extern: true - symbol: 1 + symbol: 2 - offset: 0x00000020 type: ARM64_RELOC_SUBTRACTOR length: 3 pc-rel: false extern: true - symbol: 1 + symbol: 2 - offset: 0x00000020 type: ARM64_RELOC_UNSIGNED length: 3 pc-rel: false extern: true - symbol: 1 + symbol: 2 - offset: 0x00000018 type: ARM64_RELOC_POINTER_TO_GOT length: 3 pc-rel: false extern: true - symbol: 1 + symbol: 2 - offset: 0x00000010 type: ARM64_RELOC_UNSIGNED length: 3 pc-rel: false extern: true - symbol: 1 + symbol: 2 - offset: 0x00000008 type: ARM64_RELOC_UNSIGNED length: 3 pc-rel: false extern: true - symbol: 1 + symbol: 2 local-symbols: - name: _v1 type: N_SECT + sect: 2 + value: 0x000000000000000C +global-symbols: + - name: _bar + type: N_SECT + scope: [ N_EXT ] sect: 1 - value: 0x0000000000000008 + value: 0x0000000000000000 undefined-symbols: - name: _foo type: N_UNDF scope: [ N_EXT ] value: 0x0000000000000000 +page-size: 0x00000000 ... # CHECK: defined-atoms: @@ -151,9 +165,9 @@ undefined-symbols: # CHECK: 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, # CHECK: 00, 00, 00, 00, 00, 00, 00, 00, E0, FF, FF, FF, # CHECK: FF, FF, FF, FF, DC, FF, FF, FF, FF, FF, FF, FF, -# CHECK: 00, 00, 00, 00, 00, 00, 00, 00, 04, 00, 00, 00, +# CHECK: {{..}}, {{..}}, 00, 00, 00, 00, 00, 00, 04, 00, 00, 00, # CHECK: 00, 00, 00, 00, C0, FF, FF, FF, BE, FF, FF, FF, -# CHECK: B0, FF, FF, FF ] +# CHECK: {{B0|B8}}, {{..}}, FF, FF ] # CHECK: references: # CHECK: - kind: pointer64 # CHECK: offset: 0 @@ -199,11 +213,19 @@ undefined-symbols: # CHECK: offset: 72 # CHECK: target: _foo # CHECK-NOT: addend: +# CHECK: - name: _bar +# CHECK: scope: global +# CHECK: content: [ C0, 03, 5F, D6 ] +# CHECK: alignment: 4 # CHECK: undefined-atoms: # CHECK: - name: _foo - - +# .subsections_via_symbols +# .text +# .globl_foo +# .align2 +# _foo: +# ret # .data #Lanon: # .quad 0 diff --git a/test/old-elf/AMDGPU/hsa.test b/test/old-elf/AMDGPU/hsa.test deleted file mode 100644 index 4a17ae2223e0..000000000000 --- a/test/old-elf/AMDGPU/hsa.test +++ /dev/null @@ -1,53 +0,0 @@ -# RUN: yaml2obj -format=elf %s > %t.obj -# RUN: lld -flavor old-gnu -target amdgcn--hsa %t.obj -o %t.exe --noinhibit-exec -# RUN: llvm-readobj -h -program-headers -s -symbols %t.exe | FileCheck %s - -# CHECK: ElfHeader { -# CHECK: Ident { -# CHECK: Class: 64-bit (0x2) -# CHECK: DataEncoding: LittleEndian (0x1) -# CHECK: Machine: EM_AMDGPU (0xE0) - - -# CHECK: Section { -# CHECK: Name: .hsatext -# CHECK: Type: SHT_PROGBITS (0x1) -# 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: Symbol { -# CHECK: Name: kernel -# CHECK: Value: 0x0 -# CHECK: Binding: Local (0x0) -# CHECK: Type: AMDGPU_HSA_KERNEL (0xA) - -# CHECK: ProgramHeader { -# CHECK: Type: PT_AMDGPU_HSA_LOAD_CODE_AGENT (0x60000003) - ---- -FileHeader: - Class: ELFCLASS64 - Data: ELFDATA2LSB - OSABI: ELFOSABI_GNU - Type: ET_REL - Machine: EM_AMDGPU -Sections: - - Name: .hsatext - Type: SHT_PROGBITS - Flags: [ SHF_ALLOC, SHF_EXECINSTR ] - AddressAlign: 0x0000000000000004 - Content: '' - - Name: .note - Type: SHT_NOTE - AddressAlign: 0x0000000000000001 - Content: '00' -Symbols: - Local: - - Name: kernel - Type: STT_GNU_IFUNC - Section: .hsatext -... |