466 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			466 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
## Test how we handle cases when dynamic relocations or corresponding dynamic tags are broken.
 | 
						|
 | 
						|
## Check that llvm-readobj/llvm-readelf reports an error when dumping relocations if a dynamic
 | 
						|
## symbol name offset is broken (goes past the end of the dynamic symbol string table).
 | 
						|
 | 
						|
# RUN: yaml2obj --docnum=1 %s -o %t1
 | 
						|
# RUN: llvm-readobj --dyn-relocations %t1 2>&1 | FileCheck %s -DFILE=%t1 --check-prefix=LLVM
 | 
						|
# RUN: llvm-readelf --dyn-relocations %t1 2>&1 | FileCheck %s -DFILE=%t1 --check-prefix=GNU
 | 
						|
 | 
						|
# LLVM:      Dynamic Relocations {
 | 
						|
# LLVM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 1: st_name (0x1234) is past the end of the string table of size 0x1
 | 
						|
# LLVM-NEXT:   0x0 R_X86_64_NONE <corrupt> 0x0
 | 
						|
# LLVM-NEXT: }
 | 
						|
 | 
						|
# GNU:      'RELA' relocation section at offset {{.+}} contains 24 bytes:
 | 
						|
# GNU-NEXT: Offset           Info             Type          Symbol's Value   Symbol's Name + Addend
 | 
						|
# GNU-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 1: st_name (0x1234) is past the end of the string table of size 0x1
 | 
						|
# GNU-NEXT: 0000000000000000 0000000100000000 R_X86_64_NONE 0000000000000000 <corrupt> + 0
 | 
						|
 | 
						|
--- !ELF
 | 
						|
FileHeader:
 | 
						|
  Class:   ELFCLASS64
 | 
						|
  Data:    ELFDATA2LSB
 | 
						|
  Type:    ET_DYN
 | 
						|
  Machine: EM_X86_64
 | 
						|
Sections:
 | 
						|
  - Name:    .rela.dyn
 | 
						|
    Type:    SHT_RELA
 | 
						|
    Link:    .dynsym
 | 
						|
    Relocations:
 | 
						|
      - Symbol: 1 ## Index of a dynamic symbol with a broken st_name.
 | 
						|
        Type:   R_X86_64_NONE
 | 
						|
  - Name: .dynamic
 | 
						|
    Type: SHT_DYNAMIC
 | 
						|
    Entries:
 | 
						|
      - Tag:   DT_RELA
 | 
						|
        Value: 0x0000000000000000
 | 
						|
      - Tag:   DT_RELASZ
 | 
						|
        Value: 0x0000000000000018
 | 
						|
      - Tag:   DT_RELAENT
 | 
						|
        Value: 0x0000000000000018
 | 
						|
      - Tag:   DT_NULL
 | 
						|
        Value: 0x0000000000000000
 | 
						|
DynamicSymbols:
 | 
						|
  - StName: 0x1234
 | 
						|
ProgramHeaders:
 | 
						|
  - Type:  PT_LOAD
 | 
						|
    Sections:
 | 
						|
      - Section: .rela.dyn
 | 
						|
      - Section: .dynamic
 | 
						|
 | 
						|
## Show we print a warning for an invalid relocation table size stored in a DT_RELASZ entry.
 | 
						|
# RUN: yaml2obj --docnum=2 %s -o %t2
 | 
						|
# RUN: llvm-readobj --dyn-relocations %t2 2>&1 | FileCheck %s -DFILE=%t2 --check-prefix=INVALID-DT-RELASZ
 | 
						|
# RUN: llvm-readelf --dyn-relocations %t2 2>&1 | FileCheck %s -DFILE=%t2 --check-prefix=INVALID-DT-RELASZ
 | 
						|
 | 
						|
# INVALID-DT-RELASZ: warning: '[[FILE]]': invalid DT_RELASZ value (0xff) or DT_RELAENT value (0x18)
 | 
						|
 | 
						|
--- !ELF
 | 
						|
FileHeader:
 | 
						|
  Class:   ELFCLASS64
 | 
						|
  Data:    ELFDATA2LSB
 | 
						|
  Type:    ET_DYN
 | 
						|
  Machine: EM_X86_64
 | 
						|
Sections:
 | 
						|
  - Name:    .rela.dyn
 | 
						|
    Type:    SHT_RELA
 | 
						|
    Relocations:
 | 
						|
      - Type:   R_X86_64_NONE
 | 
						|
  - Name: .dynamic
 | 
						|
    Type: SHT_DYNAMIC
 | 
						|
    Entries:
 | 
						|
      - Tag:   DT_RELA
 | 
						|
        Value: 0x0
 | 
						|
      - Tag:   DT_RELASZ
 | 
						|
        Value: 0xFF
 | 
						|
      - Tag:   DT_RELAENT
 | 
						|
        Value: 0x18
 | 
						|
      - Tag:   DT_NULL
 | 
						|
        Value: 0x0
 | 
						|
DynamicSymbols: []
 | 
						|
ProgramHeaders:
 | 
						|
  - Type:  PT_LOAD
 | 
						|
    Sections:
 | 
						|
      - Section: .rela.dyn
 | 
						|
      - Section: .dynamic
 | 
						|
 | 
						|
## Show we print a warning for an invalid relocation table entry size stored in a DT_RELAENT entry.
 | 
						|
# RUN: yaml2obj --docnum=3 %s -o %t3
 | 
						|
# RUN: llvm-readobj --dyn-relocations %t3 2>&1 | FileCheck %s -DFILE=%t3 --check-prefix=INVALID-DT-RELAENT
 | 
						|
# RUN: llvm-readelf --dyn-relocations %t3 2>&1 | FileCheck %s -DFILE=%t3 --check-prefix=INVALID-DT-RELAENT
 | 
						|
 | 
						|
## INVALID-DT-RELAENT: warning: '[[FILE]]': invalid DT_RELASZ value (0x18) or DT_RELAENT value (0xff)
 | 
						|
 | 
						|
--- !ELF
 | 
						|
FileHeader:
 | 
						|
  Class:   ELFCLASS64
 | 
						|
  Data:    ELFDATA2LSB
 | 
						|
  Type:    ET_DYN
 | 
						|
  Machine: EM_X86_64
 | 
						|
Sections:
 | 
						|
  - Name:    .rela.dyn
 | 
						|
    Type:    SHT_RELA
 | 
						|
    Relocations:
 | 
						|
      - Type:   R_X86_64_NONE
 | 
						|
  - Name: .dynamic
 | 
						|
    Type: SHT_DYNAMIC
 | 
						|
    Entries:
 | 
						|
      - Tag:   DT_RELA
 | 
						|
        Value: 0x0
 | 
						|
      - Tag:   DT_RELASZ
 | 
						|
        Value: 0x18
 | 
						|
      - Tag:   DT_RELAENT
 | 
						|
        Value: 0xFF
 | 
						|
      - Tag:   DT_NULL
 | 
						|
        Value: 0x0
 | 
						|
DynamicSymbols: []
 | 
						|
ProgramHeaders:
 | 
						|
  - Type:  PT_LOAD
 | 
						|
    Sections:
 | 
						|
      - Section: .rela.dyn
 | 
						|
      - Section: .dynamic
 | 
						|
 | 
						|
## Show we print a warning for an invalid relocation table size stored in a DT_RELSZ entry.
 | 
						|
# RUN: yaml2obj --docnum=4 %s -o %t4
 | 
						|
# RUN: llvm-readobj --dyn-relocations %t4 2>&1 | FileCheck %s -DFILE=%t4 --check-prefix=INVALID-DT-RELSZ
 | 
						|
# RUN: llvm-readelf --dyn-relocations %t4 2>&1 | FileCheck %s -DFILE=%t4 --check-prefix=INVALID-DT-RELSZ
 | 
						|
 | 
						|
## INVALID-DT-RELSZ: warning: '[[FILE]]': invalid DT_RELSZ value (0xff) or DT_RELENT value (0x18)
 | 
						|
 | 
						|
--- !ELF
 | 
						|
FileHeader:
 | 
						|
  Class:   ELFCLASS32
 | 
						|
  Data:    ELFDATA2LSB
 | 
						|
  Type:    ET_DYN
 | 
						|
  Machine: EM_386
 | 
						|
Sections:
 | 
						|
  - Name:    .rela.dyn
 | 
						|
    Type:    SHT_REL
 | 
						|
    Relocations:
 | 
						|
      - Type:   R_386_NONE
 | 
						|
  - Name: .dynamic
 | 
						|
    Type: SHT_DYNAMIC
 | 
						|
    Entries:
 | 
						|
      - Tag:   DT_REL
 | 
						|
        Value: 0x0
 | 
						|
      - Tag:   DT_RELSZ
 | 
						|
        Value: 0xFF
 | 
						|
      - Tag:   DT_RELENT
 | 
						|
        Value: 0x18
 | 
						|
      - Tag:   DT_NULL
 | 
						|
        Value: 0x0
 | 
						|
DynamicSymbols: []
 | 
						|
ProgramHeaders:
 | 
						|
  - Type:  PT_LOAD
 | 
						|
    Sections:
 | 
						|
      - Section: .rela.dyn
 | 
						|
      - Section: .dynamic
 | 
						|
 | 
						|
## Show we print a warning for an invalid relocation table entry size stored in a DT_RELENT entry.
 | 
						|
# RUN: yaml2obj --docnum=5 %s -o %t5
 | 
						|
# RUN: llvm-readobj --dyn-relocations %t5 2>&1 | FileCheck %s -DFILE=%t5 --check-prefix=INVALID-DT-RELENT
 | 
						|
# RUN: llvm-readelf --dyn-relocations %t5 2>&1 | FileCheck %s -DFILE=%t5 --check-prefix=INVALID-DT-RELENT
 | 
						|
 | 
						|
## INVALID-DT-RELENT: warning: '[[FILE]]': invalid DT_RELSZ value (0x18) or DT_RELENT value (0xff)
 | 
						|
 | 
						|
--- !ELF
 | 
						|
FileHeader:
 | 
						|
  Class:   ELFCLASS32
 | 
						|
  Data:    ELFDATA2LSB
 | 
						|
  Type:    ET_DYN
 | 
						|
  Machine: EM_386
 | 
						|
Sections:
 | 
						|
  - Name:    .rela.dyn
 | 
						|
    Type:    SHT_REL
 | 
						|
    Relocations:
 | 
						|
      - Type:   R_386_NONE
 | 
						|
  - Name: .dynamic
 | 
						|
    Type: SHT_DYNAMIC
 | 
						|
    Entries:
 | 
						|
      - Tag:   DT_REL
 | 
						|
        Value: 0x0
 | 
						|
      - Tag:   DT_RELSZ
 | 
						|
        Value: 0x18
 | 
						|
      - Tag:   DT_RELENT
 | 
						|
        Value: 0xFF
 | 
						|
      - Tag:   DT_NULL
 | 
						|
        Value: 0x0
 | 
						|
DynamicSymbols: []
 | 
						|
ProgramHeaders:
 | 
						|
  - Type:  PT_LOAD
 | 
						|
    Sections:
 | 
						|
      - Section: .rela.dyn
 | 
						|
      - Section: .dynamic
 | 
						|
 | 
						|
## Show we print a warning for an invalid relocation table size stored in a DT_RELRSZ/DT_ANDROID_RELRSZ entry.
 | 
						|
# RUN: yaml2obj --docnum=6 %s -o %t6
 | 
						|
# RUN: llvm-readobj --dyn-relocations %t6 2>&1 | FileCheck %s -DFILE=%t6 --check-prefix=INVALID-DT-RELRSZ
 | 
						|
# RUN: llvm-readelf --dyn-relocations %t6 2>&1 | FileCheck %s -DFILE=%t6 --check-prefix=INVALID-DT-RELRSZ
 | 
						|
# RUN: yaml2obj --docnum=7 %s -o %t7
 | 
						|
# RUN: llvm-readobj --dyn-relocations %t7 2>&1 | FileCheck %s -DFILE=%t7 --check-prefix=INVALID-DT-ANDROID-RELRSZ
 | 
						|
# RUN: llvm-readelf --dyn-relocations %t7 2>&1 | FileCheck %s -DFILE=%t7 --check-prefix=INVALID-DT-ANDROID-RELRSZ
 | 
						|
 | 
						|
## INVALID-DT-RELRSZ:         warning: '[[FILE]]': invalid DT_RELRSZ value (0xff) or DT_RELRENT value (0x18)
 | 
						|
## INVALID-DT-ANDROID-RELRSZ: warning: '[[FILE]]': invalid DT_ANDROID_RELRSZ value (0xff) or DT_ANDROID_RELRENT value (0x18)
 | 
						|
 | 
						|
--- !ELF
 | 
						|
FileHeader:
 | 
						|
  Class:   ELFCLASS64
 | 
						|
  Data:    ELFDATA2LSB
 | 
						|
  Type:    ET_DYN
 | 
						|
  Machine: EM_X86_64
 | 
						|
Sections:
 | 
						|
  - Name:    .relr.dyn
 | 
						|
    Type:    SHT_RELR
 | 
						|
    Flags:   [ SHF_ALLOC ]
 | 
						|
    Content: ""
 | 
						|
  - Name: .dynamic
 | 
						|
    Type: SHT_DYNAMIC
 | 
						|
    Entries:
 | 
						|
      - Tag:   DT_RELR
 | 
						|
        Value: 0x0
 | 
						|
      - Tag:   DT_RELRSZ
 | 
						|
        Value: 0xFF
 | 
						|
      - Tag:   DT_RELRENT
 | 
						|
        Value: 0x18
 | 
						|
      - Tag:   DT_NULL
 | 
						|
        Value: 0x0
 | 
						|
DynamicSymbols: []
 | 
						|
ProgramHeaders:
 | 
						|
  - Type:  PT_LOAD
 | 
						|
    Sections:
 | 
						|
      - Section: .relr.dyn
 | 
						|
      - Section: .dynamic
 | 
						|
 | 
						|
--- !ELF
 | 
						|
FileHeader:
 | 
						|
  Class:   ELFCLASS64
 | 
						|
  Data:    ELFDATA2LSB
 | 
						|
  Type:    ET_DYN
 | 
						|
  Machine: EM_X86_64
 | 
						|
Sections:
 | 
						|
  - Name:    .relr.dyn
 | 
						|
    Type:    SHT_RELR
 | 
						|
    Flags:   [ SHF_ALLOC ]
 | 
						|
    Content: ""
 | 
						|
  - Name: .dynamic
 | 
						|
    Type: SHT_DYNAMIC
 | 
						|
    Entries:
 | 
						|
      - Tag:   DT_RELR
 | 
						|
        Value: 0x0
 | 
						|
      - Tag:   DT_ANDROID_RELRSZ
 | 
						|
        Value: 0xFF
 | 
						|
      - Tag:   DT_ANDROID_RELRENT
 | 
						|
        Value: 0x18
 | 
						|
      - Tag:   DT_NULL
 | 
						|
        Value: 0x0
 | 
						|
DynamicSymbols: []
 | 
						|
ProgramHeaders:
 | 
						|
  - Type:  PT_LOAD
 | 
						|
    Sections:
 | 
						|
      - Section: .relr.dyn
 | 
						|
      - Section: .dynamic
 | 
						|
 | 
						|
## Show we print a warning for an invalid relocation table entry size stored in a DT_RELRENT/DT_ANDROID_RELRENT entry.
 | 
						|
# RUN: yaml2obj --docnum=8 %s -o %t8
 | 
						|
# RUN: llvm-readobj --dyn-relocations %t8 2>&1 | FileCheck %s -DFILE=%t8 --check-prefix=INVALID-DT-RELRENT
 | 
						|
# RUN: llvm-readelf --dyn-relocations %t8 2>&1 | FileCheck %s -DFILE=%t8 --check-prefix=INVALID-DT-RELRENT
 | 
						|
# RUN: yaml2obj --docnum=9 %s -o %t9
 | 
						|
# RUN: llvm-readobj --dyn-relocations %t9 2>&1 | FileCheck %s -DFILE=%t9 --check-prefix=INVALID-DT-ANDROID-RELRENT
 | 
						|
# RUN: llvm-readelf --dyn-relocations %t9 2>&1 | FileCheck %s -DFILE=%t9 --check-prefix=INVALID-DT-ANDROID-RELRENT
 | 
						|
 | 
						|
## INVALID-DT-RELRENT:         invalid DT_RELRSZ value (0x18) or DT_RELRENT value (0xff)
 | 
						|
## INVALID-DT-ANDROID-RELRENT: invalid DT_ANDROID_RELRSZ value (0x18) or DT_ANDROID_RELRENT value (0xff)
 | 
						|
 | 
						|
--- !ELF
 | 
						|
FileHeader:
 | 
						|
  Class:   ELFCLASS64
 | 
						|
  Data:    ELFDATA2LSB
 | 
						|
  Type:    ET_DYN
 | 
						|
  Machine: EM_X86_64
 | 
						|
Sections:
 | 
						|
  - Name:    .relr.dyn
 | 
						|
    Type:    SHT_RELR
 | 
						|
    Flags:   [ SHF_ALLOC ]
 | 
						|
    Content: ""
 | 
						|
  - Name: .dynamic
 | 
						|
    Type: SHT_DYNAMIC
 | 
						|
    Entries:
 | 
						|
      - Tag:   DT_RELR
 | 
						|
        Value: 0x0
 | 
						|
      - Tag:   DT_RELRSZ
 | 
						|
        Value: 0x18
 | 
						|
      - Tag:   DT_RELRENT
 | 
						|
        Value: 0xFF
 | 
						|
      - Tag:   DT_NULL
 | 
						|
        Value: 0x0
 | 
						|
DynamicSymbols: []
 | 
						|
ProgramHeaders:
 | 
						|
  - Type:  PT_LOAD
 | 
						|
    Sections:
 | 
						|
      - Section: .relr.dyn
 | 
						|
      - Section: .dynamic
 | 
						|
 | 
						|
--- !ELF
 | 
						|
FileHeader:
 | 
						|
  Class:   ELFCLASS64
 | 
						|
  Data:    ELFDATA2LSB
 | 
						|
  Type:    ET_DYN
 | 
						|
  Machine: EM_X86_64
 | 
						|
Sections:
 | 
						|
  - Name:    .relr.dyn
 | 
						|
    Type:    SHT_RELR
 | 
						|
    Flags:   [ SHF_ALLOC ]
 | 
						|
    Content: ""
 | 
						|
  - Name: .dynamic
 | 
						|
    Type: SHT_DYNAMIC
 | 
						|
    Entries:
 | 
						|
      - Tag:   DT_RELR
 | 
						|
        Value: 0x0
 | 
						|
      - Tag:   DT_ANDROID_RELRSZ
 | 
						|
        Value: 0x18
 | 
						|
      - Tag:   DT_ANDROID_RELRENT
 | 
						|
        Value: 0xFF
 | 
						|
      - Tag:   DT_NULL
 | 
						|
        Value: 0x0
 | 
						|
DynamicSymbols: []
 | 
						|
ProgramHeaders:
 | 
						|
  - Type:  PT_LOAD
 | 
						|
    Sections:
 | 
						|
      - Section: .relr.dyn
 | 
						|
      - Section: .dynamic
 | 
						|
 | 
						|
## Show we print a warning for an invalid value of DT_PLTRELSZ, which describes the total size
 | 
						|
## of the relocation entries associated with the procedure linkage table.
 | 
						|
# RUN: yaml2obj --docnum=10 %s -o %t10
 | 
						|
# RUN: llvm-readobj --dyn-relocations %t10 2>&1 | FileCheck %s -DFILE=%t10 --check-prefix=INVALID-DT-PLTRELSZ
 | 
						|
# RUN: llvm-readelf --dyn-relocations %t10 2>&1 | FileCheck %s -DFILE=%t10 --check-prefix=INVALID-DT-PLTRELSZ
 | 
						|
 | 
						|
# INVALID-DT-PLTRELSZ: warning: '[[FILE]]': invalid DT_PLTRELSZ value (0xff){{$}}
 | 
						|
 | 
						|
--- !ELF
 | 
						|
FileHeader:
 | 
						|
  Class:   ELFCLASS64
 | 
						|
  Data:    ELFDATA2LSB
 | 
						|
  Type:    ET_EXEC
 | 
						|
  Machine: EM_X86_64
 | 
						|
Sections:
 | 
						|
  - Name:  .rela.plt
 | 
						|
    Type:  SHT_RELA
 | 
						|
    Relocations:
 | 
						|
      - Type:   R_X86_64_NONE
 | 
						|
  - Name:  .dynamic
 | 
						|
    Type:  SHT_DYNAMIC
 | 
						|
    Entries:
 | 
						|
      - Tag:   DT_JMPREL
 | 
						|
        Value: 0x0
 | 
						|
      - Tag:   DT_PLTRELSZ
 | 
						|
        Value: 0xFF ## The valid value would be 0x18.
 | 
						|
      - Tag:   DT_PLTREL
 | 
						|
        Value: 0x7 ## DT_RELA
 | 
						|
      - Tag:   DT_NULL
 | 
						|
        Value: 0x0
 | 
						|
DynamicSymbols: []
 | 
						|
ProgramHeaders:
 | 
						|
  - Type:  PT_LOAD
 | 
						|
    Sections:
 | 
						|
      - Section: .rela.plt
 | 
						|
      - Section: .dynamic
 | 
						|
 | 
						|
## Show we print a warning when dumping dynamic relocations if there is no dynamic symbol table.
 | 
						|
# RUN: yaml2obj --docnum=11 %s -o %t11
 | 
						|
# RUN: llvm-readobj --dyn-relocations %t11 2>&1 | FileCheck %s -DFILE=%t11 --check-prefix=LLVM-NO-DYNSYM
 | 
						|
# RUN: llvm-readelf --dyn-relocations %t11 2>&1 | FileCheck %s -DFILE=%t11 --check-prefix=GNU-NO-DYNSYM
 | 
						|
 | 
						|
# LLVM-NO-DYNSYM:      Dynamic Relocations {
 | 
						|
# LLVM-NO-DYNSYM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 0: no dynamic symbol table found
 | 
						|
# LLVM-NO-DYNSYM-NEXT:   0x0 R_X86_64_NONE <corrupt> 0x0
 | 
						|
# LLVM-NO-DYNSYM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 1: no dynamic symbol table found
 | 
						|
# LLVM-NO-DYNSYM-NEXT:   0x0 R_X86_64_NONE <corrupt> 0x0
 | 
						|
# LLVM-NO-DYNSYM-NEXT: }
 | 
						|
 | 
						|
# GNU-NO-DYNSYM:      'RELA' relocation section at offset 0x78 contains 48 bytes:
 | 
						|
# GNU-NO-DYNSYM-NEXT: Offset            Info             Type             Symbol's Value   Symbol's Name + Addend
 | 
						|
# GNU-NO-DYNSYM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 0: no dynamic symbol table found
 | 
						|
# GNU-NO-DYNSYM-NEXT: 0000000000000000  0000000000000000 R_X86_64_NONE                     <corrupt> + 0
 | 
						|
# GNU-NO-DYNSYM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 1: no dynamic symbol table found
 | 
						|
# GNU-NO-DYNSYM-NEXT: 0000000000000000  0000000100000000 R_X86_64_NONE                     <corrupt> + 0
 | 
						|
 | 
						|
--- !ELF
 | 
						|
FileHeader:
 | 
						|
  Class:   ELFCLASS64
 | 
						|
  Data:    ELFDATA2LSB
 | 
						|
  Type:    ET_DYN
 | 
						|
  Machine: EM_X86_64
 | 
						|
Sections:
 | 
						|
  - Name:    .rela.dyn
 | 
						|
    Type:    SHT_RELA
 | 
						|
    Relocations:
 | 
						|
      - Type:   R_X86_64_NONE
 | 
						|
      - Type:   R_X86_64_NONE
 | 
						|
        Symbol: 0x1
 | 
						|
  - Name: .dynamic
 | 
						|
    Type: SHT_DYNAMIC
 | 
						|
    Entries:
 | 
						|
      - Tag:   DT_RELA
 | 
						|
        Value: 0x0
 | 
						|
      - Tag:   DT_RELASZ
 | 
						|
        Value: 0x30
 | 
						|
      - Tag:   DT_RELAENT
 | 
						|
        Value: 0x18
 | 
						|
      - Tag:   DT_NULL
 | 
						|
        Value: 0x0
 | 
						|
ProgramHeaders:
 | 
						|
  - Type:  PT_LOAD
 | 
						|
    Sections:
 | 
						|
      - Section: .rela.dyn
 | 
						|
      - Section: .dynamic
 | 
						|
 | 
						|
## Show we print a warning when the symbol index of a dynamic relocation is too
 | 
						|
## large (goes past the end of the dynamic symbol table).
 | 
						|
# RUN: yaml2obj --docnum=12 %s -o %t12
 | 
						|
# RUN: llvm-readobj --dyn-relocations %t12 2>&1 | FileCheck %s -DFILE=%t12 --check-prefix=LLVM-INVALID-DYNSYM
 | 
						|
# RUN: llvm-readelf --dyn-relocations %t12 2>&1 | FileCheck %s -DFILE=%t12 --check-prefix=GNU-INVALID-DYNSYM
 | 
						|
 | 
						|
# LLVM-INVALID-DYNSYM:      Dynamic Relocations {
 | 
						|
# LLVM-INVALID-DYNSYM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 2: index is greater than or equal to the number of dynamic symbols (2)
 | 
						|
# LLVM-INVALID-DYNSYM-NEXT:   0x0 R_X86_64_NONE <corrupt> 0x0
 | 
						|
# LLVM-INVALID-DYNSYM-NEXT: }
 | 
						|
 | 
						|
# GNU-INVALID-DYNSYM:      'RELA' relocation section at offset 0x78 contains 24 bytes:
 | 
						|
# GNU-INVALID-DYNSYM-NEXT: Offset            Info             Type             Symbol's Value   Symbol's Name + Addend
 | 
						|
# GNU-INVALID-DYNSYM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 2: index is greater than or equal to the number of dynamic symbols (2)
 | 
						|
# GNU-INVALID-DYNSYM-NEXT: 0000000000000000  0000000200000000 R_X86_64_NONE                     <corrupt> + 0
 | 
						|
 | 
						|
--- !ELF
 | 
						|
FileHeader:
 | 
						|
  Class:   ELFCLASS64
 | 
						|
  Data:    ELFDATA2LSB
 | 
						|
  Type:    ET_DYN
 | 
						|
  Machine: EM_X86_64
 | 
						|
Sections:
 | 
						|
  - Name:    .rela.dyn
 | 
						|
    Type:    SHT_RELA
 | 
						|
    Relocations:
 | 
						|
      - Type:   R_X86_64_NONE
 | 
						|
        Symbol: 0x2
 | 
						|
  - Name: .dynamic
 | 
						|
    Type: SHT_DYNAMIC
 | 
						|
    Entries:
 | 
						|
      - Tag:   DT_RELA
 | 
						|
        Value: 0x0
 | 
						|
      - Tag:   DT_RELASZ
 | 
						|
        Value: 0x18
 | 
						|
      - Tag:   DT_RELAENT
 | 
						|
        Value: 0x18
 | 
						|
      - Tag:   DT_NULL
 | 
						|
        Value: 0x0
 | 
						|
DynamicSymbols:
 | 
						|
  - Name: foo
 | 
						|
ProgramHeaders:
 | 
						|
  - Type:  PT_LOAD
 | 
						|
    Sections:
 | 
						|
      - Section: .rela.dyn
 | 
						|
      - Section: .dynamic
 |