reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
// REQUIRES: aarch64
// RUN: llvm-mc -filetype=obj -triple=aarch64-none-linux %s -o %t
// RUN: not ld.lld %t -o /dev/null 2>&1 | FileCheck %s

// Test derived from a typical ODR violation where a global is declared
// extern int but defined as a half or byte sized type.
 .section .text
 .globl _start
 .type _start, %function
// Access foo2 as if it were an aligned 32-bit int, expect an error as
// foo is not aligned

_start:
 ldrb w2, [x0, #:lo12:foo1]  // Ok as no shift involved
 ldrh w2, [x0, #:lo12:foo1]  // Error foo1 is not 2-byte aligned
 ldrh w2, [x0, #:lo12:foo2]  // Ok as foo2 is 2-byte aligned
 ldr  w2, [x0, #:lo12:foo2]  // Error foo2 is not 4-byte aligned
 ldr  w2, [x0, #:lo12:foo4]  // Ok as foo4 is 4-byte aligned
 ldr  x3, [x0, #:lo12:foo4]  // Error foo4 is not 8-byte aligned
 ldr  x3, [x0, #:lo12:foo8]  // Ok as foo8 is 8-byte aligned
 ldr  q0, [x0, #:lo12:foo8]  // Error foo8 is not 16-byte aligned
 ldr  q0, [x0, #:lo12:foo16] // Ok as foo16 is 16-byte aligned

 .section .data.bool, "a", @nobits
 .balign 16
 .globl foo16
 .globl foo1
 .globl foo2
 .globl foo4
 .globl foo8
foo16:
 .space 1
foo1:
 .space 1
foo2:
 .space 2
foo4:
 .space 4
foo8:
 .space 8

// CHECK: improper alignment for relocation R_AARCH64_LDST16_ABS_LO12_NC: 0x220181 is not aligned to 2 bytes
// CHECK-NEXT: improper alignment for relocation R_AARCH64_LDST32_ABS_LO12_NC: 0x220182 is not aligned to 4 bytes
// CHECK-NEXT: improper alignment for relocation R_AARCH64_LDST64_ABS_LO12_NC: 0x220184 is not aligned to 8 bytes
// CHECK-NEXT: improper alignment for relocation R_AARCH64_LDST128_ABS_LO12_NC: 0x220188 is not aligned to 16 bytes