# RUN: yaml2obj --docnum=1 %s -o %t # RUN: llvm-objdump --reloc %t > %t1 # RUN: llvm-objdump -r %t > %t2 # RUN: cmp %t1 %t2 # RUN: FileCheck %s --input-file=%t1 --strict-whitespace --match-full-lines # CHECK:RELOCATION RECORDS FOR [.text]: # CHECK-NEXT:OFFSET TYPE VALUE # CHECK-NEXT:0000000000000001 R_X86_64_32 glob1 # CHECK-NEXT:0000000000000001 R_X86_64_32S glob2 # CHECK-NEXT:0000000000000002 R_X86_64_64 loc1 # CHECK-NEXT:0000000000000001 R_X86_64_32 glob1+0x1 # CHECK-NEXT:0000000000000001 R_X86_64_32S glob2+0x2 # CHECK-NEXT:0000000000000002 R_X86_64_64 loc1+0x3 --- !ELF FileHeader: !FileHeader Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Machine: EM_X86_64 Sections: - Name: .text Type: SHT_PROGBITS Content: "0000000000000000" AddressAlign: 16 Flags: [SHF_ALLOC] - Name: .rel.text Type: SHT_REL Info: .text AddressAlign: 4 Relocations: - Offset: 0x1 Symbol: glob1 Type: R_X86_64_32 - Offset: 0x1 Symbol: glob2 Type: R_X86_64_32S - Offset: 0x2 Symbol: loc1 Type: R_X86_64_64 - Name: .rela.text Type: SHT_RELA Link: .symtab Info: .text AddressAlign: 4 Relocations: - Offset: 0x1 Addend: 1 Symbol: glob1 Type: R_X86_64_32 - Offset: 0x1 Addend: 2 Symbol: glob2 Type: R_X86_64_32S - Offset: 0x2 Addend: 3 Symbol: loc1 Type: R_X86_64_64 Symbols: - Name: loc1 - Name: loc2 - Name: glob1 Section: .text Value: 0x0 Size: 4 Binding: STB_GLOBAL - Name: glob2 Binding: STB_GLOBAL ## Check we report an error if the relocated section identified by the ## sh_info field of a relocation section is invalid. # RUN: yaml2obj --docnum=2 %s -o %t2 # RUN: not llvm-objdump --reloc %t2 2>&1 | FileCheck %s -DFILE=%t2 --check-prefix=ERR # ERR: error: '[[FILE]]': section (1): unable to get a relocation target: invalid section index: 255 --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Machine: EM_X86_64 Sections: - Name: .rela.foo Type: SHT_RELA Info: 0xFF Relocations: - Offset: 0x1 Type: R_X86_64_NONE ## Check ranges of addends being displayed in a dump of relocations. # RUN: yaml2obj --docnum=3 %s -o %t3 # RUN: llvm-objdump -r %t3 | FileCheck %s --check-prefix=ADDENDS # ADDENDS: RELOCATION RECORDS FOR [.text]: # ADDENDS: R_X86_64_64 glob-0x8000000000000000 # ADDENDS: R_X86_64_64 glob+0x7fffffffffffffff # ADDENDS: R_X86_64_64 glob-0x1 # ADDENDS: R_X86_64_64 glob+0x12345678 # ADDENDS: R_X86_64_64 glob{{$}} --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Machine: EM_X86_64 Sections: - Name: .text Type: SHT_PROGBITS Size: 8 Flags: [SHF_EXECINSTR,SHF_ALLOC] - Name: .rela.text Type: SHT_RELA Info: .text Relocations: - Offset: 0x0 Addend: -9223372036854775808 Symbol: glob Type: R_X86_64_64 - Offset: 0x1 Symbol: glob Type: R_X86_64_64 Addend: 9223372036854775807 - Offset: 0x2 Symbol: glob Type: R_X86_64_64 Addend: -1 - Offset: 0x3 Symbol: glob Type: R_X86_64_64 Addend: 0x12345678 - Offset: 0x4 Symbol: glob Type: R_X86_64_64 Addend: 0 Symbols: - Name: glob Section: .text Value: 0x0 Size: 0 Binding: STB_GLOBAL ## Check relocation formatting on 32 bit as well to verify the formatting is correct. # RUN: yaml2obj --docnum=4 %s > %t4 # RUN: llvm-objdump -r %t4 | FileCheck %s --check-prefix=ELF32 --strict-whitespace --match-full-lines # ELF32:RELOCATION RECORDS FOR [.text]: # ELF32-NEXT:OFFSET TYPE VALUE # ELF32-NEXT:00000001 R_386_32 global # ELF32-NEXT:00000002 R_386_PC32 local # ELF32-NEXT:00000001 R_386_NONE global+0x1 # ELF32-NEXT:00000002 R_386_NONE local+0x2 --- !ELF FileHeader: Class: ELFCLASS32 Data: ELFDATA2LSB Type: ET_REL Machine: EM_386 Sections: - Name: .text Type: SHT_PROGBITS - Name: .rel.text Type: SHT_REL Info: .text Relocations: - Offset: 0x1 Symbol: global Type: R_386_32 - Offset: 0x2 Symbol: local Type: R_386_PC32 - Name: .rela.text Type: SHT_RELA Info: .text Relocations: - Offset: 0x1 Addend: 1 Symbol: global Type: R_386_NONE - Offset: 0x2 Addend: 2 Symbol: local Type: R_386_NONE Symbols: - Name: local - Name: global Binding: STB_GLOBAL