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 --match-full-lines @foo = external global i32, align 4 @bar = global i32* @foo, align 4 @@ -9,8 +9,10 @@ ret void } -; CHECK: RELOCATION RECORDS FOR [CODE]: -; CHECK-NEXT: 00000006 R_WASM_TYPE_INDEX_LEB 1+0 +; CHECK:RELOCATION RECORDS FOR [CODE]: +; 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:RELOCATION RECORDS FOR [DATA]: +; 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 @@ -2,13 +2,14 @@ // RUN: llvm-objdump -r %p/Inputs/many-relocs.obj-i386 | FileCheck %s 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 @@ -2,16 +2,17 @@ // RUN: llvm-objdump -r %p/Inputs/win64-unwind.exe.coff-x86_64.obj | FileCheck %s 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 @@ -6,7 +6,8 @@ # RUN: llvm-objdump -r %t | FileCheck %s # 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 --match-full-lines -# 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: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 @@ -143,3 +144,71 @@ 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_NONE glob1 +# ELF32-NEXT:00000001 R_386_PC32 glob2 +# ELF32-NEXT:00000002 R_386_32 loc1 +# ELF32-NEXT:00000001 R_386_NONE glob1+0x1 +# ELF32-NEXT:00000001 R_386_PC32 glob2+0x2 +# ELF32-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 @@ -10,7 +10,8 @@ # 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";