Index: llvm/test/tools/llvm-objdump/WebAssembly/relocations.test =================================================================== --- llvm/test/tools/llvm-objdump/WebAssembly/relocations.test +++ llvm/test/tools/llvm-objdump/WebAssembly/relocations.test @@ -1,4 +1,4 @@ -; RUN: llc -mtriple=wasm32-unknown-unknown -filetype=obj %s -o - | llvm-objdump -r - | FileCheck %s +; RUN: llc -mtriple=wasm32-unknown-unknown -filetype=obj %s -o - | llvm-objdump -r - | FileCheck %s --strict-whitespace @foo = external global i32, align 4 @bar = global i32* @foo, align 4 @@ -10,7 +10,9 @@ } ; CHECK: RELOCATION RECORDS FOR [CODE]: -; CHECK-NEXT: 00000006 R_WASM_TYPE_INDEX_LEB 1+0 +; CHECK-NEXT: OFFSET TYPE VALUE +; CHECK-NEXT: 00000006 R_WASM_TYPE_INDEX_LEB 1+0 ; CHECK: RELOCATION RECORDS FOR [DATA]: -; CHECK-NEXT: 00000006 R_WASM_MEMORY_ADDR_I32 foo+0 +; CHECK-NEXT: OFFSET TYPE VALUE +; CHECK-NEXT: 00000006 R_WASM_MEMORY_ADDR_I32 foo+0 Index: llvm/test/tools/llvm-objdump/coff-many-relocs.test =================================================================== --- llvm/test/tools/llvm-objdump/coff-many-relocs.test +++ llvm/test/tools/llvm-objdump/coff-many-relocs.test @@ -1,14 +1,15 @@ // Test that llvm-objdump can handle IMAGE_SCN_LNK_NRELOC_OVFL. -// RUN: llvm-objdump -r %p/Inputs/many-relocs.obj-i386 | FileCheck %s +// RUN: llvm-objdump -r %p/Inputs/many-relocs.obj-i386 | FileCheck %s --strict-whitespace CHECK: RELOCATION RECORDS FOR [.text]: -CHECK-NEXT: IMAGE_REL_I386_DIR16 foo -CHECK-NEXT: IMAGE_REL_I386_REL16 foo -CHECK-NEXT: IMAGE_REL_I386_DIR32 foo -CHECK-NEXT: IMAGE_REL_I386_DIR32NB foo -CHECK-NEXT: IMAGE_REL_I386_SEG12 foo -CHECK-NEXT: IMAGE_REL_I386_SECTION foo -CHECK-NEXT: IMAGE_REL_I386_SECREL foo -CHECK-NEXT: IMAGE_REL_I386_TOKEN foo -CHECK-NEXT: IMAGE_REL_I386_SECREL7 foo -CHECK-NEXT: IMAGE_REL_I386_REL32 foo +CHECK-NEXT: TYPE VALUE +CHECK-NEXT: IMAGE_REL_I386_DIR16 foo +CHECK-NEXT: IMAGE_REL_I386_REL16 foo +CHECK-NEXT: IMAGE_REL_I386_DIR32 foo +CHECK-NEXT: IMAGE_REL_I386_DIR32NB foo +CHECK-NEXT: IMAGE_REL_I386_SEG12 foo +CHECK-NEXT: IMAGE_REL_I386_SECTION foo +CHECK-NEXT: IMAGE_REL_I386_SECREL foo +CHECK-NEXT: IMAGE_REL_I386_TOKEN foo +CHECK-NEXT: IMAGE_REL_I386_SECREL7 foo +CHECK-NEXT: IMAGE_REL_I386_REL32 foo Index: llvm/test/tools/llvm-objdump/hex-relocation-addr.test =================================================================== --- llvm/test/tools/llvm-objdump/hex-relocation-addr.test +++ llvm/test/tools/llvm-objdump/hex-relocation-addr.test @@ -1,17 +1,18 @@ // This test checks that relocation addresses are printed in hex -// RUN: llvm-objdump -r %p/Inputs/win64-unwind.exe.coff-x86_64.obj | FileCheck %s +// RUN: llvm-objdump -r %p/Inputs/win64-unwind.exe.coff-x86_64.obj | FileCheck %s --strict-whitespace CHECK: RELOCATION RECORDS FOR [.pdata]: -CHECK-NEXT: 0 IMAGE_REL_AMD64_ADDR32NB func -CHECK-NEXT: 4 IMAGE_REL_AMD64_ADDR32NB func -CHECK-NEXT: 8 IMAGE_REL_AMD64_ADDR32NB .xdata -CHECK-NEXT: c IMAGE_REL_AMD64_ADDR32NB func -CHECK-NEXT: 10 IMAGE_REL_AMD64_ADDR32NB func -CHECK-NEXT: 14 IMAGE_REL_AMD64_ADDR32NB .xdata -CHECK-NEXT: 18 IMAGE_REL_AMD64_ADDR32NB smallFunc -CHECK-NEXT: 1c IMAGE_REL_AMD64_ADDR32NB smallFunc -CHECK-NEXT: 20 IMAGE_REL_AMD64_ADDR32NB .xdata -CHECK-NEXT: 24 IMAGE_REL_AMD64_ADDR32NB allocFunc -CHECK-NEXT: 28 IMAGE_REL_AMD64_ADDR32NB allocFunc -CHECK-NEXT: 2c IMAGE_REL_AMD64_ADDR32NB .xdata +CHECK-NEXT: OFFSET TYPE VALUE +CHECK-NEXT: 0000000000000000 IMAGE_REL_AMD64_ADDR32NB func +CHECK-NEXT: 0000000000000004 IMAGE_REL_AMD64_ADDR32NB func +CHECK-NEXT: 0000000000000008 IMAGE_REL_AMD64_ADDR32NB .xdata +CHECK-NEXT: 000000000000000c IMAGE_REL_AMD64_ADDR32NB func +CHECK-NEXT: 0000000000000010 IMAGE_REL_AMD64_ADDR32NB func +CHECK-NEXT: 0000000000000014 IMAGE_REL_AMD64_ADDR32NB .xdata +CHECK-NEXT: 0000000000000018 IMAGE_REL_AMD64_ADDR32NB smallFunc +CHECK-NEXT: 000000000000001c IMAGE_REL_AMD64_ADDR32NB smallFunc +CHECK-NEXT: 0000000000000020 IMAGE_REL_AMD64_ADDR32NB .xdata +CHECK-NEXT: 0000000000000024 IMAGE_REL_AMD64_ADDR32NB allocFunc +CHECK-NEXT: 0000000000000028 IMAGE_REL_AMD64_ADDR32NB allocFunc +CHECK-NEXT: 000000000000002c IMAGE_REL_AMD64_ADDR32NB .xdata Index: llvm/test/tools/llvm-objdump/relocation-xindex-symbol.test =================================================================== --- llvm/test/tools/llvm-objdump/relocation-xindex-symbol.test +++ llvm/test/tools/llvm-objdump/relocation-xindex-symbol.test @@ -3,10 +3,11 @@ ## has to use the SHT_SYMTAB_SHNDX section. # RUN: yaml2obj %s -o %t -# RUN: llvm-objdump -r %t | FileCheck %s +# RUN: llvm-objdump -r %t | FileCheck %s --strict-whitespace # CHECK: RELOCATION RECORDS FOR [.text]: -# CHECK-NEXT: 0000000000000000 R_X86_64_32 bar +# CHECK-NEXT: OFFSET TYPE VALUE +# CHECK-NEXT: 0000000000000000 R_X86_64_32 bar --- !ELF FileHeader: Index: llvm/test/tools/llvm-objdump/relocations-elf.test =================================================================== --- llvm/test/tools/llvm-objdump/relocations-elf.test +++ llvm/test/tools/llvm-objdump/relocations-elf.test @@ -2,15 +2,16 @@ # RUN: llvm-objdump --reloc %t > %t1 # RUN: llvm-objdump -r %t > %t2 # RUN: cmp %t1 %t2 -# RUN: FileCheck %s --input-file=%t1 +# RUN: FileCheck %s --input-file=%t1 --strict-whitespace # CHECK: RELOCATION RECORDS FOR [.text]: -# 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 +# 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 @@ -143,3 +144,75 @@ Value: 0x0 Size: 0 Binding: STB_GLOBAL + +## Check relocation formatting on 32 bit as well to verify the padding is correct +# RUN: yaml2obj --docnum=4 %s > %t4 +# RUN: llvm-objdump -r %t4 | FileCheck %s --check-prefix=32BITPADDING --strict-whitespace + +# 32BITPADDING: RELOCATION RECORDS FOR [.text]: +# 32BITPADDING-NEXT: OFFSET TYPE VALUE +# 32BITPADDING-NEXT: 00000001 R_386_NONE glob1 +# 32BITPADDING-NEXT: 00000001 R_386_PC32 glob2 +# 32BITPADDING-NEXT: 00000002 R_386_32 loc1 +# 32BITPADDING-NEXT: 00000001 R_386_NONE glob1+0x1 +# 32BITPADDING-NEXT: 00000001 R_386_PC32 glob2+0x2 +# 32BITPADDING-NEXT: 00000002 R_386_32 loc1+0x3 + +--- !ELF +FileHeader: !FileHeader + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_386 + +Sections: +- Name: .text + Type: SHT_PROGBITS + Content: "0000000000000000" + AddressAlign: 8 + Flags: [SHF_ALLOC] + +- Name: .rel.text + Type: SHT_REL + Info: .text + AddressAlign: 4 + Relocations: + - Offset: 0x1 + Symbol: glob1 + Type: R_386_NONE + - Offset: 0x1 + Symbol: glob2 + Type: R_386_PC32 + - Offset: 0x2 + Symbol: loc1 + Type: R_386_32 + +- Name: .rela.text + Type: SHT_RELA + Link: .symtab + Info: .text + AddressAlign: 4 + Relocations: + - Offset: 0x1 + Addend: 1 + Symbol: glob1 + Type: R_386_NONE + - Offset: 0x1 + Addend: 2 + Symbol: glob2 + Type: R_386_PC32 + - Offset: 0x2 + Addend: 3 + Symbol: loc1 + Type: R_386_32 + +Symbols: + - Name: loc1 + - Name: loc2 + - Name: glob1 + Section: .text + Value: 0x0 + Size: 4 + Binding: STB_GLOBAL + - Name: glob2 + Binding: STB_GLOBAL Index: llvm/test/tools/llvm-objdump/relocations-in-nonreloc.test =================================================================== --- llvm/test/tools/llvm-objdump/relocations-in-nonreloc.test +++ llvm/test/tools/llvm-objdump/relocations-in-nonreloc.test @@ -6,11 +6,13 @@ # RUN: llvm-objdump -r %t2 | FileCheck %s -DFILE=%t2 --check-prefix=FMT --implicit-check-not={{.}} # RUN: yaml2obj --docnum=3 %s -o %t3 # RUN: llvm-objdump -r %t3 | FileCheck %s -DFILE=%t3 --check-prefixes=FMT,REL --implicit-check-not={{.}} +# RUN: llvm-objdump -r %t3 | FileCheck %s -DFILE=%t3 --strict-whitespace --check-prefixes=REL # FMT: [[FILE]]: file format ELF64-x86-64 # REL: RELOCATION RECORDS FOR []: -# REL-NEXT: 0000000000000123 R_X86_64_NONE *ABS*+0x141 +# REL-NEXT: OFFSET TYPE VALUE +# REL-NEXT: 0000000000000123 R_X86_64_NONE *ABS*+0x141 ## Executable. --- !ELF Index: llvm/tools/llvm-objdump/llvm-objdump.cpp =================================================================== --- llvm/tools/llvm-objdump/llvm-objdump.cpp +++ llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -1639,6 +1639,11 @@ for (std::pair> &P : SecToRelSec) { StringRef SecName = unwrapOrError(P.first.getName(), Obj->getFileName()); outs() << "RELOCATION RECORDS FOR [" << SecName << "]:\n"; + uint32_t OffsetPadding = (Obj->getBytesInAddress() > 4 ? 16 : 8); + uint32_t TypePadding = 24; + outs() << left_justify("OFFSET", OffsetPadding) << " " + << left_justify("TYPE", TypePadding) << " " + << "VALUE\n"; for (SectionRef Section : P.second) { for (const RelocationRef &Reloc : Section.relocations()) { @@ -1651,8 +1656,9 @@ if (Error E = getRelocationValueString(Reloc, ValueStr)) reportError(std::move(E), Obj->getFileName()); - outs() << format(Fmt.data(), Address) << " " << RelocName << " " - << ValueStr << "\n"; + outs() << format(Fmt.data(), Address) << " " + << left_justify(RelocName, TypePadding) << " " << ValueStr + << "\n"; } } outs() << "\n";