llvm/llvm/test/tools/llvm-objdump/ELF/crel.test

# RUN: yaml2obj --docnum=1 %s -o %t
# RUN: llvm-objdump -r %t | FileCheck %s --strict-whitespace --match-full-lines

#      CHECK:RELOCATION RECORDS FOR [.text]:
# CHECK-NEXT:OFFSET           TYPE                     VALUE
# CHECK-NEXT:0000000000000001 R_X86_64_32              g1+0x1
# CHECK-NEXT:0000000000000002 R_X86_64_64              l1+0x2
# CHECK-NEXT:0000000000000000 R_X86_64_32S             g1-0x1
# CHECK-NEXT:0000000000000004 R_X86_64_32S             .text-0x8000000000000000
#CHECK-EMPTY:
# CHECK-NEXT:RELOCATION RECORDS FOR [nonalloc]:
# CHECK-NEXT:OFFSET           TYPE                     VALUE
# CHECK-NEXT:0000000000000010 R_X86_64_64              g1+0x1
# CHECK-NEXT:0000000000000020 R_X86_64_64              g2+0x2
# CHECK-NEXT:0000000000000030 R_X86_64_64              *ABS*
#  CHECK-NOT:{{.}}

--- !ELF
FileHeader: !FileHeader
  Class: ELFCLASS64
  Data: ELFDATA2LSB
  Type: ET_REL
  Machine: EM_X86_64

Sections:
- Name: .text
  Type: SHT_PROGBITS
  Content: "0000000000000000"
  Flags: [SHF_ALLOC]
- Name: .crel.text
  Type: SHT_CREL
  Info: .text
  Link: .symtab
  Relocations:
    - Offset: 0x1
      Symbol: g1
      Type:   R_X86_64_32
      Addend: 1
    - Offset: 0x2
      Symbol: l1
      Type:   R_X86_64_64
      Addend: 2
    - Offset: 0x0
      Symbol: g1
      Type:   R_X86_64_32S
      Addend: 0xffffffffffffffff
    - Offset: 0x4
      Symbol: .text
      Type:   R_X86_64_32S
      Addend: 0x8000000000000000
- Name: nonalloc
  Type: SHT_PROGBITS
  Size: 0x30
- Name: .crelnonalloc
  Type: SHT_CREL
  Info: nonalloc
  Link: .symtab
  Relocations:
    - Offset: 0x10
      Symbol: g1
      Type:   R_X86_64_64
      Addend: 1
    - Offset: 0x20
      Symbol: g2
      Type:   R_X86_64_64
      Addend: 2
    - Offset: 0x30
      Symbol: 0
      Type:   R_X86_64_64

Symbols:
  - Name: .text
    Type: STT_SECTION
    Section: .text
  - Name:    l1
  - Name:    g1
    Section: .text
    Value:   0x0
    Size:    4
    Binding: STB_GLOBAL
  - Name:    g2
    Binding: STB_GLOBAL

## Check relocation formatting on ELFCLASS32 as well.
# RUN: yaml2obj --docnum=2 %s > %t2
# RUN: llvm-objdump -r %t2 | FileCheck %s --check-prefix=ELF32 --strict-whitespace --match-full-lines

#      ELF32:RELOCATION RECORDS FOR [.text]:
# ELF32-NEXT:OFFSET   TYPE                     VALUE
# ELF32-NEXT:00000008 R_ARM_REL32              l1+0x1
# ELF32-NEXT:00000004 R_ARM_ABS32              g1

--- !ELF
FileHeader:
  Class:   ELFCLASS32
  Data:    ELFDATA2MSB
  Type:    ET_REL
  Machine: EM_ARM
Sections:
- Name: .text
  Type: SHT_PROGBITS
  Size: 0x10
- Name: .crel.text
  Type: SHT_CREL
  Info: .text
  Link: .symtab
  Relocations:
    - Offset: 0x8
      Symbol: l1
      Type:   R_ARM_REL32
      Addend: 1
    - Offset: 0x4
      Symbol: g1
      Type:   R_ARM_ABS32
Symbols:
  - Name:    l1
  - Name:    g1
    Binding: STB_GLOBAL

## Check CREL with implicit addends.
# RUN: yaml2obj --docnum=3 %s -o %t3
# RUN: llvm-objdump -r %t3 | FileCheck %s --check-prefix=IMPLICIT --strict-whitespace --match-full-lines
#      IMPLICIT:RELOCATION RECORDS FOR [.data]:
# IMPLICIT-NEXT:OFFSET           TYPE                     VALUE
# IMPLICIT-NEXT:000000000000001f R_X86_64_32              g1
# IMPLICIT-NEXT:000000000000003f R_X86_64_64              g1
# IMPLICIT-NEXT:0000000000000000 R_X86_64_32S             l1
--- !ELF
FileHeader:
  Class:     ELFCLASS64
  Data:      ELFDATA2LSB
  Type:      ET_REL
  Machine:   EM_X86_64
Sections:
  - Name:    .text
    Type:    SHT_PROGBITS
  - Name:    .data
    Type:    SHT_PROGBITS
  - Name:    .crel.data
    Type:    SHT_CREL
    Flags:   [ SHF_INFO_LINK ]
    Link:    .symtab
    Info:    .data
    Content: 187f030a82017787feffffffffffffff077f0a
Symbols:
  - Name:    .text
    Type:    STT_SECTION
    Section: .text
  - Name:    l1
    Section: .text
  - Name:    g1
    Section: .text
    Binding: STB_GLOBAL

## Test errors.
# RUN: yaml2obj --docnum=4 %s -o %t.err
# RUN: llvm-objdump -r %t.err 2>&1 | FileCheck %s --check-prefix=ERR -DFILE=%t.err

#      ERR:RELOCATION RECORDS FOR [.data]:
# ERR-NEXT:OFFSET           TYPE                     VALUE
# ERR-NEXT:warning: '[[FILE]]': unable to decode LEB128 at offset 0x00000000: malformed uleb128, extends past end
#  ERR-NOT:{{.}}

--- !ELF
FileHeader:
  Class:     ELFCLASS64
  Data:      ELFDATA2LSB
  Type:      ET_REL
  Machine:   EM_X86_64
Sections:
  - Name:    .text
    Type:    SHT_PROGBITS
  - Name:    .data
    Type:    SHT_PROGBITS
  - Name:    .crel.data
    Type:    SHT_CREL
    Flags:   []
    Link:    .symtab
    Info:    .data
Symbols:
  - Name:    .text
    Type:    STT_SECTION
    Section: .text

# RUN: yaml2obj --docnum=5 %s -o %t.err2
# RUN: llvm-objdump -r %t.err2 2>&1 | FileCheck %s --check-prefix=ERR2 -DFILE=%t.err2

#      ERR2:RELOCATION RECORDS FOR [.data]:
# ERR2-NEXT:OFFSET           TYPE                     VALUE
# ERR2-NEXT:warning: '[[FILE]]': unexpected end of data at offset 0x1 while reading [0x1, 0x2)
# ERR2-NOT:{{.}}

--- !ELF
FileHeader:
  Class:     ELFCLASS32
  Data:      ELFDATA2MSB
  Type:      ET_REL
  Machine:   EM_ARM
Sections:
  - Name:    .text
    Type:    SHT_PROGBITS
  - Name:    .data
    Type:    SHT_PROGBITS
  - Name:    .crel.data
    Type:    SHT_CREL
    Flags:   []
    Link:    .symtab
    Info:    .data
    Content: 08
Symbols:
  - Name:    .text
    Type:    STT_SECTION
    Section: .text