1// REQUIRES: aarch64 2// RUN: llvm-mc -filetype=obj -triple=aarch64-none-linux %s -o %t 3// RUN: not ld.lld %t -o /dev/null 2>&1 | FileCheck %s 4 5// Test derived from a typical ODR violation where a global is declared 6// extern int but defined as a half or byte sized type. 7 .section .text 8 .globl _start 9 .type _start, %function 10// Access foo2 as if it were an aligned 32-bit int, expect an error as 11// foo is not aligned 12 13_start: 14 ldrb w2, [x0, #:lo12:foo1] // Ok as no shift involved 15 ldrh w2, [x0, #:lo12:foo1] // Error foo1 is not 2-byte aligned 16 ldrh w2, [x0, #:lo12:foo2] // Ok as foo2 is 2-byte aligned 17 ldr w2, [x0, #:lo12:foo2] // Error foo2 is not 4-byte aligned 18 ldr w2, [x0, #:lo12:foo4] // Ok as foo4 is 4-byte aligned 19 ldr x3, [x0, #:lo12:foo4] // Error foo4 is not 8-byte aligned 20 ldr x3, [x0, #:lo12:foo8] // Ok as foo8 is 8-byte aligned 21 ldr q0, [x0, #:lo12:foo8] // Error foo8 is not 16-byte aligned 22 ldr q0, [x0, #:lo12:foo16] // Ok as foo16 is 16-byte aligned 23 24 .section .data.bool, "a", @nobits 25 .balign 16 26 .globl foo16 27 .globl foo1 28 .globl foo2 29 .globl foo4 30 .globl foo8 31foo16: 32 .space 1 33foo1: 34 .space 1 35foo2: 36 .space 2 37foo4: 38 .space 4 39foo8: 40 .space 8 41 42// CHECK: improper alignment for relocation R_AARCH64_LDST16_ABS_LO12_NC: 0x220181 is not aligned to 2 bytes 43// CHECK-NEXT: improper alignment for relocation R_AARCH64_LDST32_ABS_LO12_NC: 0x220182 is not aligned to 4 bytes 44// CHECK-NEXT: improper alignment for relocation R_AARCH64_LDST64_ABS_LO12_NC: 0x220184 is not aligned to 8 bytes 45// CHECK-NEXT: improper alignment for relocation R_AARCH64_LDST128_ABS_LO12_NC: 0x220188 is not aligned to 16 bytes 46