# REQUIRES: x86

## This tests that we can handle relocations that are not sorted by address.
## llvm-mc isn't able to emit such a file, hence the use of yaml2obj. ld64
## may emit files with unsorted relocations in `-r` mode, so we need to support
## this.

# RUN: yaml2obj %s -o %t.o
# RUN: %lld -dylib -o %t %t.o
# RUN: llvm-objdump --macho -d %t | FileCheck %s

# CHECK:      _foo:
# CHECK-NEXT:      movq    _bar(%rip), %rax
# CHECK-NEXT: _bar:
# CHECK-NEXT:      movq    _baz(%rip), %rax
# CHECK-NEXT: _baz:
# CHECK-NEXT:      movq    _foo(%rip), %rax

--- !mach-o
FileHeader:
  magic:           0xFEEDFACF
  cputype:         0x1000007
  cpusubtype:      0x3
  filetype:        0x1
  ncmds:           2
  sizeofcmds:      280
  flags:           0x2000
  reserved:        0x0
LoadCommands:
  - cmd:             LC_SEGMENT_64
    cmdsize:         152
    segname:         ''
    vmaddr:          0
    vmsize:          21
    fileoff:         312
    filesize:        21
    maxprot:         7
    initprot:        7
    nsects:          1
    flags:           0
    Sections:
      - sectname:        __text
        segname:         __TEXT
        addr:            0x0
        size:            21
        offset:          0x138
        align:           0
        reloff:          0x150
        nreloc:          3
        flags:           0x80000400
        reserved1:       0x0
        reserved2:       0x0
        reserved3:       0x0
        content:         488B0500000000488B0500000000488B0500000000
        relocations:
          - address:         0x3
            symbolnum:       1
            pcrel:           true
            length:          2
            extern:          true
            type:            1
            scattered:       false
            value:           0
          - address:         0x11
            symbolnum:       0
            pcrel:           true
            length:          2
            extern:          true
            type:            1
            scattered:       false
            value:           0
          - address:         0xA
            symbolnum:       2
            pcrel:           true
            length:          2
            extern:          true
            type:            1
            scattered:       false
            value:           0
  - cmd:             LC_SYMTAB
    cmdsize:         24
    symoff:          360
    nsyms:           3
    stroff:          408
    strsize:         16
LinkEditData:
  NameList:
    - n_strx:          11
      n_type:          0xE
      n_sect:          1
      n_desc:          0
      n_value:         0
    - n_strx:          6
      n_type:          0xE
      n_sect:          1
      n_desc:          0
      n_value:         7
    - n_strx:          1
      n_type:          0xE
      n_sect:          1
      n_desc:          0
      n_value:         14
  StringTable:
    - ''
    - _baz
    - _bar
    - _foo
...
