1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 12:43:36 +01:00
llvm-mirror/test/MC/AArch64/ilp32-diagnostics.s
Amanieu d'Antras bea54db865 [AArch64] Add support for the GNU ILP32 ABI
Add the aarch64[_be]-*-gnu_ilp32 targets to support the GNU ILP32 ABI for AArch64.

The needed codegen changes were mostly already implemented in D61259, which added support for the watchOS ILP32 ABI. The main changes are:
- Wiring up the new target to enable ILP32 codegen and MC.
- ILP32 va_list support.
- ILP32 TLSDESC relocation support.

There was existing MC support for ELF ILP32 relocations from D25159 which could be enabled by passing "-target-abi ilp32" to llvm-mc. This was changed to check for "gnu_ilp32" in the target triple instead. This shouldn't cause any issues since the existing support was slightly broken: it was generating ELF64 objects instead of the ELF32 object files expected by the GNU ILP32 toolchain.

This target has been tested by running the full rustc testsuite on a big-endian ILP32 system based on the GCC ILP32 toolchain.

Reviewed By: kristof.beyls

Differential Revision: https://reviews.llvm.org/D94143
2021-01-20 13:34:47 +00:00

98 lines
3.8 KiB
ArmAsm

// RUN: not llvm-mc -triple aarch64-none-linux-gnu_ilp32 \
// RUN: < %s 2> %t2 -filetype=obj >/dev/null
// RUN: FileCheck --check-prefix=CHECK-ERROR %s < %t2
.xword sym-.
// CHECK-ERROR: error: ILP32 8 byte PC relative data relocation not supported (LP64 eqv: PREL64)
// CHECK-ERROR: ^
.xword sym+16
// CHECK-ERROR: error: ILP32 8 byte absolute data relocation not supported (LP64 eqv: ABS64)
// CHECK-ERROR: ^
movz x7, #:abs_g3:some_label
// CHECK-ERROR: error: ILP32 absolute MOV relocation not supported (LP64 eqv: MOVW_UABS_G3)
// CHECK-ERROR: movz x7, #:abs_g3:some_label
// CHECK-ERROR: ^
movz x3, #:abs_g2:some_label
// CHECK-ERROR: error: ILP32 absolute MOV relocation not supported (LP64 eqv: MOVW_UABS_G2)
// CHECK-ERROR: movz x3, #:abs_g2:some_label
// CHECK-ERROR: ^
movz x19, #:abs_g2_s:some_label
// CHECK-ERROR: error: ILP32 absolute MOV relocation not supported (LP64 eqv: MOVW_SABS_G2)
// CHECK-ERROR: movz x19, #:abs_g2_s:some_label
// CHECK-ERROR: ^
movk x5, #:abs_g2_nc:some_label
// CHECK-ERROR: error: ILP32 absolute MOV relocation not supported (LP64 eqv: MOVW_UABS_G2_NC)
// CHECK-ERROR: movk x5, #:abs_g2_nc:some_label
// CHECK-ERROR: ^
movz x19, #:abs_g1_s:some_label
// CHECK-ERROR: error: ILP32 absolute MOV relocation not supported (LP64 eqv: MOVW_SABS_G1)
// CHECK-ERROR: movz x19, #:abs_g1_s:some_label
// CHECK-ERROR: ^
movk x5, #:abs_g1_nc:some_label
// CHECK-ERROR: error: ILP32 absolute MOV relocation not supported (LP64 eqv: MOVW_UABS_G1_NC)
// CHECK-ERROR: movk x5, #:abs_g1_nc:some_label
// CHECK-ERROR: ^
movz x3, #:dtprel_g2:var
// CHECK-ERROR: error: ILP32 absolute MOV relocation not supported (LP64 eqv: TLSLD_MOVW_DTPREL_G2)
// CHECK-ERROR: movz x3, #:dtprel_g2:var
// CHECK-ERROR: ^
movk x9, #:dtprel_g1_nc:var
// CHECK-ERROR: error: ILP32 absolute MOV relocation not supported (LP64 eqv: TLSLD_MOVW_DTPREL_G1_NC)
// CHECK-ERROR: movk x9, #:dtprel_g1_nc:var
// CHECK-ERROR: ^
movz x3, #:tprel_g2:var
// CHECK-ERROR: error: ILP32 absolute MOV relocation not supported (LP64 eqv: TLSLE_MOVW_TPREL_G2)
// CHECK-ERROR: movz x3, #:tprel_g2:var
// CHECK-ERROR: ^
movk x9, #:tprel_g1_nc:var
// CHECK-ERROR: error: ILP32 absolute MOV relocation not supported (LP64 eqv: TLSLE_MOVW_TPREL_G1_NC)
// CHECK-ERROR: movk x9, #:tprel_g1_nc:var
// CHECK-ERROR: ^
movz x15, #:gottprel_g1:var
// CHECK-ERROR: error: ILP32 absolute MOV relocation not supported (LP64 eqv: TLSIE_MOVW_GOTTPREL_G1)
// CHECK-ERROR: movz x15, #:gottprel_g1:var
// CHECK-ERROR: ^
movk x13, #:gottprel_g0_nc:var
// CHECK-ERROR: error: ILP32 absolute MOV relocation not supported (LP64 eqv: TLSIE_MOVW_GOTTPREL_G0_NC)
// CHECK-ERROR: movk x13, #:gottprel_g0_nc:var
// CHECK-ERROR: ^
ldr x10, [x0, #:gottprel_lo12:var]
// CHECK-ERROR: error: ILP32 64-bit load/store relocation not supported (LP64 eqv: TLSIE_LD64_GOTTPREL_LO12_NC)
// CHECK-ERROR: ldr x10, [x0, #:gottprel_lo12:var]
// CHECK-ERROR: ^
ldr x24, [x23, #:got_lo12:sym]
// CHECK-ERROR: error: ILP32 64-bit load/store relocation not supported (LP64 eqv: LD64_GOT_LO12_NC)
// CHECK-ERROR: ^
ldr x24, [x23, :gottprel_lo12:sym]
// CHECK-ERROR: error: ILP32 64-bit load/store relocation not supported (LP64 eqv: TLSIE_LD64_GOTTPREL_LO12_NC)
// CHECK-ERROR: ^
ldr x10, [x0, #:gottprel_lo12:var]
// CHECK-ERROR: error: ILP32 64-bit load/store relocation not supported (LP64 eqv: TLSIE_LD64_GOTTPREL_LO12_NC)
// CHECK-ERROR: ldr x10, [x0, #:gottprel_lo12:var]
// CHECK-ERROR: ^
ldr x24, [x23, #:got_lo12:sym]
// CHECK-ERROR: error: ILP32 64-bit load/store relocation not supported (LP64 eqv: LD64_GOT_LO12_NC)
// CHECK-ERROR: ^
ldr x24, [x23, :gottprel_lo12:sym]
// CHECK-ERROR: error: ILP32 64-bit load/store relocation not supported (LP64 eqv: TLSIE_LD64_GOTTPREL_LO12_NC)
// CHECK-ERROR: ^