## Check how we report warnings when dumping an object with broken relocations.

# RUN: yaml2obj %s -o %t64
# RUN: llvm-readobj --relocations %t64 2>&1 | FileCheck %s -DFILE=%t64 --check-prefix=LLVM
# RUN: llvm-readelf --relocations %t64 2>&1 | FileCheck %s -DFILE=%t64 --check-prefix=GNU

# LLVM:      Relocations [
# LLVM-NEXT:   Section (3) .rel.text {
# LLVM-NEXT: warning: '[[FILE]]': unable to print relocation 1 in section 3: unable to access section [index 6] data at 0x17e7e7e8b0: offset goes past the end of file
# LLVM-NEXT: warning: '[[FILE]]': unable to print relocation 2 in section 3: unable to access section [index 6] data at 0x17e7e7e8b0: offset goes past the end of file
# LLVM-NEXT:     0x2 R_X86_64_NONE - 0x0
# LLVM-NEXT: warning: '[[FILE]]': unable to print relocation 4 in section 3: invalid section index: 255
# LLVM-NEXT: warning: '[[FILE]]': unable to print relocation 5 in section 3: a section [index 2] has an invalid sh_name (0xfefefefe) offset which goes past the end of the section name string table
# LLVM-NEXT:   }
# LLVM-NEXT:   Section (4) .rela.text {
# LLVM-NEXT: warning: '[[FILE]]': unable to print relocation 1 in section 4: invalid sh_type for symbol table, expected SHT_SYMTAB or SHT_DYNSYM
# LLVM-NEXT:   }
# LLVM-NEXT: ]

# GNU:       Relocation section '.rel.text' at offset 0x41 contains 5 entries:
# GNU-NEXT:      Offset             Info             Type               Symbol's Value  Symbol's Name
# GNU-NEXT:  warning: '[[FILE]]': unable to print relocation 1 in section 3: unable to access section [index 6] data at 0x17e7e7e8b0: offset goes past the end of file
# GNU-NEXT:  warning: '[[FILE]]': unable to print relocation 2 in section 3: unable to access section [index 6] data at 0x17e7e7e8b0: offset goes past the end of file
# GNU-NEXT:  0000000000000002  0000000000000000 R_X86_64_NONE
# GNU-NEXT:  warning: '[[FILE]]': unable to print relocation 4 in section 3: invalid section index: 255
# GNU-NEXT:  warning: '[[FILE]]': unable to print relocation 5 in section 3: a section [index 2] has an invalid sh_name (0xfefefefe) offset which goes past the end of the section name string table
# GNU-EMPTY:
# GNU-NEXT:  Relocation section '.rela.text' at offset 0x91 contains 1 entries:
# GNU-NEXT:      Offset             Info             Type               Symbol's Value  Symbol's Name + Addend
# GNU-NEXT:  warning: '[[FILE]]': unable to print relocation 1 in section 4: invalid sh_type for symbol table, expected SHT_SYMTAB or SHT_DYNSYM

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_REL
  Machine: EM_X86_64
Sections:
  - Name:    .text
    Type:    SHT_PROGBITS
    Content: '00'
  - Name:   .foo
    Type:   SHT_PROGBITS
    ShName: 0xFEFEFEFE
  - Name: .rel.text
    Type: SHT_REL
    Info: .text
    Relocations:
## Case 1: There is no symbol with index 0xFEFEFEFE.
      - Symbol: 0xFEFEFEFE
        Type:   R_X86_64_NONE
      - Symbol: 0xFEFEFEFE
        Type:   R_X86_64_NONE
## Case 2: Test that no warning is reported for a relocation against a symbol with index 0.
      - Offset: 0x2
        Symbol: 0
        Type:   R_X86_64_NONE
## Case 3: Test a relocation against a section symbol that has an invalid
##         section index (larger than the number of sections).
      - Offset: 0x3
        Symbol: .sec.symbol1
        Type:   R_X86_64_NONE
## Case 4: Test a relocation against a section symbol that has an invalid
##         sh_name offset that goes past the end of the section name string table.
      - Offset: 0x4
        Symbol: .sec.symbol2
        Type:   R_X86_64_NONE
## Case 5: Test a relocation in a section that is linked to a symbol table that
##         has a section type that is neither SHT_SYMTAB nor SHT_DYNSYM.
##         In this case the code fails to find a corresponding symbol string table.
  - Name: .rela.text
    Type: SHT_RELA
    Info: .text
    Link: .fake.symtab
    Relocations:
      - Offset: 0x5
        Symbol: symbol
        Type:   R_X86_64_NONE
  - Name:    .fake.symtab
    Type:    SHT_PROGBITS
    EntSize: 24
    Size:    48
Symbols:
  - Name:    symbol
    Section: .text
    Value:   0
  - Name:  .sec.symbol1
    Type:  STT_SECTION
    Index: 0xFF
  - Name:  .sec.symbol2
    Type:  STT_SECTION
    Index: 0x2
