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
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
; RUN: llvm-mc -triple aarch64-windows -filetype obj -o %t.obj %s
; RUN: llvm-readobj -r %t.obj | FileCheck %s
; RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix DISASM

; IMAGE_REL_ARM64_ADDR32
.Linfo_foo:
  .asciz "foo"
  .long foo

; IMAGE_REL_ARM64_ADDR32NB
.long func@IMGREL

; IMAGE_REL_ARM64_ADDR64
.globl struc
struc:
  .quad arr

; IMAGE_REL_ARM64_BRANCH26
b target

; IMAGE_REL_ARM64_PAGEBASE_REL21
adrp x0, foo

; IMAGE_REL_ARM64_PAGEOFFSET_12A
add x0, x0, :lo12:foo

; IMAGE_REL_ARM64_PAGEOFFSET_12L
ldr x0, [x0, :lo12:foo]

; IMAGE_REL_ARM64_PAGEBASE_REL21, even if the symbol offset is known
adrp x0, bar
bar:

; IMAGE_REL_ARM64_SECREL
.secrel32 .Linfo_bar
.Linfo_bar:

; IMAGE_REL_ARM64_SECTION
.secidx func

.align 2
adrp x0, baz + 0x12345
baz:
add x0, x0, :lo12:foo + 0x12345
ldrb w0, [x0, :lo12:foo + 0x12345]
ldr x0, [x0, :lo12:foo + 0x12348]

; IMAGE_REL_ARM64_SECREL_LOW12A
add x0, x0, :secrel_lo12:foo
; IMAGE_REL_ARM64_SECREL_HIGH12A
add x0, x0, :secrel_hi12:foo
; IMAGE_REL_ARM64_SECREL_LOW12L
ldr x0, [x0, :secrel_lo12:foo]

; IMAGE_REL_ARM64_REL21
adr x0, foo + 0x12345

; IMAGE_REL_ARM64_BRANCH19
bne target

; IMAGE_REL_ARM64_BRANCH14
tbz x0, #0, target

; CHECK: Format: COFF-ARM64
; CHECK: Arch: aarch64
; CHECK: AddressSize: 64bit
; CHECK: Relocations [
; CHECK:   Section (1) .text {
; CHECK: 0x4 IMAGE_REL_ARM64_ADDR32 foo
; CHECK: 0x8 IMAGE_REL_ARM64_ADDR32NB func
; CHECK: 0xC IMAGE_REL_ARM64_ADDR64 arr
; CHECK: 0x14 IMAGE_REL_ARM64_BRANCH26 target
; CHECK: 0x18 IMAGE_REL_ARM64_PAGEBASE_REL21 foo
; CHECK: 0x1C IMAGE_REL_ARM64_PAGEOFFSET_12A foo
; CHECK: 0x20 IMAGE_REL_ARM64_PAGEOFFSET_12L foo
; CHECK: 0x24 IMAGE_REL_ARM64_PAGEBASE_REL21 bar
; CHECK: 0x28 IMAGE_REL_ARM64_SECREL .text
; CHECK: 0x2C IMAGE_REL_ARM64_SECTION func
; CHECK: 0x30 IMAGE_REL_ARM64_PAGEBASE_REL21 baz
; CHECK: 0x34 IMAGE_REL_ARM64_PAGEOFFSET_12A foo
; CHECK: 0x38 IMAGE_REL_ARM64_PAGEOFFSET_12L foo
; CHECK: 0x3C IMAGE_REL_ARM64_PAGEOFFSET_12L foo
; CHECK: 0x40 IMAGE_REL_ARM64_SECREL_LOW12A foo
; CHECK: 0x44 IMAGE_REL_ARM64_SECREL_HIGH12A foo
; CHECK: 0x48 IMAGE_REL_ARM64_SECREL_LOW12L foo
; CHECK: 0x4C IMAGE_REL_ARM64_REL21 foo
; CHECK: 0x50 IMAGE_REL_ARM64_BRANCH19 target
; CHECK: 0x54 IMAGE_REL_ARM64_BRANCH14 target
; CHECK:   }
; CHECK: ]

; DISASM: 30:       20 1a 09 b0     adrp    x0, #305418240
; DISASM: 34:       00 14 0d 91     add     x0, x0, #837
; DISASM: 38:       00 14 4d 39     ldrb    w0, [x0, #837]
; DISASM: 3c:       00 a4 41 f9     ldr     x0, [x0, #840]
; DISASM: 40:       00 00 00 91     add     x0, x0, #0
; DISASM: 44:       00 00 40 91     add     x0, x0, #0, lsl #12
; DISASM: 48:       00 00 40 f9     ldr     x0, [x0]
; DISASM: 4c:       20 1a 09 30     adr     x0, #74565