# REQUIRES: aarch64

# RUN: yaml2obj < %s > %t.obj
# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
# RUN: lld-link /entry:main /subsystem:console /out:%t.exe %t.obj %p/Inputs/library-arm64.lib
# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER

# BEFORE: Disassembly of section .text:
# BEFORE:        0:       fe 0f 1f f8     str     x30, [sp, #-16]!
# BEFORE:        4:       00 00 00 90     adrp    x0, #0
# BEFORE:        8:       00 08 00 91     add     x0, x0, #2
# BEFORE:        c:       00 00 00 94     bl      #0
# BEFORE:       10:       00 01 40 39     ldrb    w0, [x8]
# BEFORE:       14:       00 01 40 79     ldrh    w0, [x8]
# BEFORE:       18:       00 01 40 b9     ldr     w0, [x8]
# BEFORE:       1c:       00 01 40 f9     ldr     x0, [x8]
# BEFORE:       20:       00 01 00 39     strb    w0, [x8]
# BEFORE:       24:       00 01 00 79     strh    w0, [x8]
# BEFORE:       28:       00 01 00 b9     str     w0, [x8]
# BEFORE:       2c:       00 01 00 f9     str     x0, [x8]
# BEFORE:       30:       00 01 40 3d     ldr     b0, [x8]
# BEFORE:       34:       00 01 40 7d     ldr     h0, [x8]
# BEFORE:       38:       00 01 40 bd     ldr     s0, [x8]
# BEFORE:       3c:       00 01 40 fd     ldr     d0, [x8]
# BEFORE:       40:       00 01 c0 3d     ldr     q0, [x8]
# BEFORE:       44:       00 01 00 3d     str     b0, [x8]
# BEFORE:       48:       00 01 00 7d     str     h0, [x8]
# BEFORE:       4c:       00 01 00 bd     str     s0, [x8]
# BEFORE:       50:       00 01 00 fd     str     d0, [x8]
# BEFORE:       54:       00 01 80 3d     str     q0, [x8]
# BEFORE:       58:       00 05 40 f9     ldr     x0, [x8, #8]
# BEFORE:       5c:       20 1a 01 b0     adrp    x0, #36982784
# BEFORE:       60:       00 fc 4f f9     ldr     x0, [x0, #8184]
# BEFORE:       64:       e0 03 1f 2a     mov      w0, wzr
# BEFORE:       68:       fe 07 41 f8     ldr     x30, [sp], #16
# BEFORE:       6c:       c0 03 5f d6     ret
# BEFORE:       70:       08 00 00 00     <unknown>
# BEFORE:       74:       00 00 00 00     <unknown>
# BEFORE:       78:       01 00 00 00     <unknown>
# BEFORE:       7c:       01 00 00 00     <unknown>

# AFTER: Disassembly of section .text:
# AFTER:  140002000:      fe 0f 1f f8     str     x30, [sp, #-16]!
# AFTER:  140002004:      e0 ff ff f0     adrp    x0, #-4096
# AFTER:  140002008:      00 18 00 91     add     x0, x0, #6
# AFTER:  14000200c:      1d 00 00 94     bl      #116
# AFTER:  140002010:      00 21 40 39     ldrb    w0, [x8, #8]
# AFTER:  140002014:      00 11 40 79     ldrh    w0, [x8, #8]
# AFTER:  140002018:      00 09 40 b9     ldr     w0, [x8, #8]
# AFTER:  14000201c:      00 05 40 f9     ldr     x0, [x8, #8]
# AFTER:  140002020:      00 21 00 39     strb    w0, [x8, #8]
# AFTER:  140002024:      00 11 00 79     strh    w0, [x8, #8]
# AFTER:  140002028:      00 09 00 b9     str     w0, [x8, #8]
# AFTER:  14000202c:      00 05 00 f9     str     x0, [x8, #8]
# AFTER:  140002030:      00 41 40 3d     ldr     b0, [x8, #16]
# AFTER:  140002034:      00 21 40 7d     ldr     h0, [x8, #16]
# AFTER:  140002038:      00 11 40 bd     ldr     s0, [x8, #16]
# AFTER:  14000203c:      00 09 40 fd     ldr     d0, [x8, #16]
# AFTER:  140002040:      00 05 c0 3d     ldr     q0, [x8, #16]
# AFTER:  140002044:      00 41 00 3d     str     b0, [x8, #16]
# AFTER:  140002048:      00 21 00 7d     str     h0, [x8, #16]
# AFTER:  14000204c:      00 11 00 bd     str     s0, [x8, #16]
# AFTER:  140002050:      00 09 00 fd     str     d0, [x8, #16]
# AFTER:  140002054:      00 05 80 3d     str     q0, [x8, #16]
# AFTER:  140002058:      00 09 40 f9     ldr     x0, [x8, #16]
# AFTER:  14000205c:      00 00 00 b0     adrp    x0, #4096
# AFTER:  140002060:      00 fc 47 f9     ldr     x0, [x0, #4088]
# AFTER:  140002064:      e0 03 1f 2a     mov      w0, wzr
# AFTER:  140002068:      fe 07 41 f8     ldr     x30, [sp], #16
# AFTER:  14000206c:      c0 03 5f d6     ret
# AFTER:  140002070:      10 10 00 40     <unknown>
# AFTER:  140002074:      01 00 00 00     <unknown>
# AFTER:  140002078:      09 10 00 00     <unknown>
# AFTER:  14000207c:      09 00 00 00     <unknown>
# AFTER:  140002080:      10 00 00 b0     adrp    x16, #4096
# AFTER:  140002084:      10 1e 40 f9     ldr     x16, [x16, #56]
# AFTER:  140002088:      00 02 1f d6     br      x16

--- !COFF
header:
  Machine:         IMAGE_FILE_MACHINE_ARM64
  Characteristics: [  ]
sections:
  - Name:            .text
    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
    Alignment:       4
    SectionData:     FE0F1FF80000009000080091000000940001403900014079000140B9000140F90001003900010079000100B9000100F90001403D0001407D000140BD000140FD0001C03D0001003D0001007D000100BD000100FD0001803D000540F9201A01B000FC4FF9E0031F2AFE0741F8C0035FD608000000000000000100000001000000
    Relocations:
      - VirtualAddress:  4
        SymbolName:      .Lstr
        Type:            IMAGE_REL_ARM64_PAGEBASE_REL21
      - VirtualAddress:  8
        SymbolName:      .Lstr
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12A
      - VirtualAddress:  12
        SymbolName:      function
        Type:            IMAGE_REL_ARM64_BRANCH26
      - VirtualAddress:  16
        SymbolName:      .Lglobal
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  20
        SymbolName:      .Lglobal
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  24
        SymbolName:      .Lglobal
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  28
        SymbolName:      .Lglobal
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  32
        SymbolName:      .Lglobal
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  36
        SymbolName:      .Lglobal
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  40
        SymbolName:      .Lglobal
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  44
        SymbolName:      .Lglobal
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  48
        SymbolName:      .Lglobal16
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  52
        SymbolName:      .Lglobal16
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  56
        SymbolName:      .Lglobal16
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  60
        SymbolName:      .Lglobal16
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  64
        SymbolName:      .Lglobal16
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  68
        SymbolName:      .Lglobal16
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  72
        SymbolName:      .Lglobal16
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  76
        SymbolName:      .Lglobal16
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  80
        SymbolName:      .Lglobal16
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  84
        SymbolName:      .Lglobal16
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  88
        SymbolName:      .Lglobal
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  92
        SymbolName:      .Lglobal16
        Type:            IMAGE_REL_ARM64_PAGEBASE_REL21
      - VirtualAddress:  96
        SymbolName:      .Lglobal0
        Type:            IMAGE_REL_ARM64_PAGEOFFSET_12L
      - VirtualAddress:  112
        SymbolName:      .Lglobal
        Type:            IMAGE_REL_ARM64_ADDR64
      - VirtualAddress:  120
        SymbolName:      .Lglobal
        Type:            IMAGE_REL_ARM64_ADDR32NB
      - VirtualAddress:  124
        SymbolName:      .Lglobal
        Type:            IMAGE_REL_ARM64_SECREL
  - Name:            .data
    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
    Alignment:       4
    SectionData:     ''
  - Name:            .bss
    Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
    Alignment:       4
    SectionData:     ''
  - Name:            .rdata
    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
    Alignment:       1
    SectionData:     00000000202068656C6C6F20776F726C6400
symbols:
  - Name:            .text
    Value:           0
    SectionNumber:   1
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_NULL
    StorageClass:    IMAGE_SYM_CLASS_STATIC
    SectionDefinition:
      Length:          28
      NumberOfRelocations: 3
      NumberOfLinenumbers: 0
      CheckSum:        1438860354
      Number:          1
  - Name:            .rdata
    Value:           0
    SectionNumber:   4
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_NULL
    StorageClass:    IMAGE_SYM_CLASS_STATIC
    SectionDefinition:
      Length:          12
      NumberOfRelocations: 0
      NumberOfLinenumbers: 0
      CheckSum:        872944732
      Number:          4
  - Name:            main
    Value:           0
    SectionNumber:   1
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_NULL
    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
  - Name:            .Lstr
    Value:           4
    SectionNumber:   4
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_NULL
    StorageClass:    IMAGE_SYM_CLASS_STATIC
  - Name:            .Lglobal
    Value:           8
    SectionNumber:   4
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_NULL
    StorageClass:    IMAGE_SYM_CLASS_STATIC
  - Name:            .Lglobal16
    Value:           16
    SectionNumber:   4
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_NULL
    StorageClass:    IMAGE_SYM_CLASS_STATIC
  - Name:            .Lglobal0
    Value:           0
    SectionNumber:   4
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_NULL
    StorageClass:    IMAGE_SYM_CLASS_STATIC
  - Name:            function
    Value:           0
    SectionNumber:   0
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_NULL
    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
...
