[llvm-readobj] Impl GNU style printing of sections and relocations

Differential Revision: http://reviews.llvm.org/D17523

llvm-svn: 263561
This commit is contained in:
Hemant Kulkarni 2016-03-15 17:25:31 +00:00
parent d81fc2168d
commit 46e5dcc160
5 changed files with 709 additions and 269 deletions

View File

@ -0,0 +1,28 @@
RUN: llvm-readobj -r %p/Inputs/relocs.obj.elf-i386 --elf-output-style=GNU \
RUN: | FileCheck %s -check-prefix ELF32
RUN: llvm-readobj -r %p/Inputs/relocs.obj.elf-x86_64 --elf-output-style=GNU \
RUN: | FileCheck %s -check-prefix ELF64
ELF32: Relocation section '.rel.text' at offset 0x318 contains 41 entries:
ELF32-NEXT: Offset Info Type Sym. Value Symbol's Name
ELF32-NEXT: 00000002 00000500 R_386_NONE 00000000 sym
ELF32-NEXT: 00000008 00000501 R_386_32 00000000 sym
ELF32-NEXT: 0000000e 00000502 R_386_PC32 00000000 sym
ELF32-NEXT: 00000014 00000503 R_386_GOT32 00000000 sym
ELF32-NEXT: 0000001a 00000504 R_386_PLT32 00000000 sym
ELF32-NEXT: 00000020 00000505 R_386_COPY 00000000 sym
ELF32-NEXT: 00000026 00000506 R_386_GLOB_DAT 00000000 sym
ELF32-NEXT: 0000002c 00000507 R_386_JUMP_SLOT 00000000 sym
ELF32-NEXT: 00000032 00000508 R_386_RELATIVE 00000000 sym
ELF32-NEXT: 00000038 00000509 R_386_GOTOFF 00000000 sym
ELF64: Relocation section '.rela.text' at offset 0x430 contains 38 entries:
ELF64-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend
ELF64-NEXT: 0000000000000003 0000000500000000 R_X86_64_NONE 0000000000000000 sym - 4
ELF64-NEXT: 000000000000000a 0000000500000001 R_X86_64_64 0000000000000000 sym - 4
ELF64-NEXT: 0000000000000011 0000000500000002 R_X86_64_PC32 0000000000000000 sym - 4
ELF64-NEXT: 0000000000000018 0000000500000003 R_X86_64_GOT32 0000000000000000 sym - 4
ELF64-NEXT: 000000000000001f 0000000500000004 R_X86_64_PLT32 0000000000000000 sym - 4
ELF64-NEXT: 0000000000000026 0000000500000005 R_X86_64_COPY 0000000000000000 sym - 4
ELF64-NEXT: 000000000000002d 0000000500000006 R_X86_64_GLOB_DAT 0000000000000000 sym - 4
ELF64-NEXT: 0000000000000034 0000000500000007 R_X86_64_JUMP_SLOT 0000000000000000 sym - 4

View File

@ -0,0 +1,35 @@
RUN: llvm-readobj -s %p/Inputs/relocs.obj.elf-i386 --elf-output-style=GNU \
RUN: | FileCheck %s -check-prefix ELF32
RUN: llvm-readobj -s %p/Inputs/relocs.obj.elf-x86_64 --elf-output-style=GNU \
RUN: | FileCheck %s -check-prefix ELF64
ELF32: Section Headers:
ELF32-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
ELF32-NEXT: [ 0] NULL 00000000 000000 000000 00 0 0 0
ELF32-NEXT: [ 1] .text PROGBITS 00000000 000034 0000f6 00 AX 0 0 4
ELF32-NEXT: [ 2] .rel.text REL 00000000 000318 000148 08 6 1 4
ELF32-NEXT: [ 3] .data PROGBITS 00000000 00012c 000000 00 WA 0 0 4
ELF32-NEXT: [ 4] .bss NOBITS 00000000 00012c 000000 00 WA 0 0 4
ELF32-NEXT: [ 5] .shstrtab STRTAB 00000000 00012c 000030 00 0 0 1
ELF32-NEXT: [ 6] .symtab SYMTAB 00000000 00029c 000060 10 7 4 4
ELF32-NEXT: [ 7] .strtab STRTAB 00000000 0002fc 00001b 00 0 0 1
ELF32-NEXT: Key to Flags:
ELF32-NEXT: W (write), A (alloc), X (execute), M (merge), S (strings), l (large)
ELF32-NEXT: I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
ELF32-NEXT: O (extra OS processing required) o (OS specific), p (processor specific)
ELF64: There are 8 section headers, starting at offset 0x180:
ELF64: Section Headers:
ELF64-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
ELF64-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0
ELF64-NEXT: [ 1] .text PROGBITS 0000000000000000 000040 00010a 00 AX 0 0 4
ELF64-NEXT: [ 2] .rela.text RELA 0000000000000000 000430 000390 18 6 1 8
ELF64-NEXT: [ 3] .data PROGBITS 0000000000000000 00014c 000000 00 WA 0 0 4
ELF64-NEXT: [ 4] .bss NOBITS 0000000000000000 00014c 000000 00 WA 0 0 4
ELF64-NEXT: [ 5] .shstrtab STRTAB 0000000000000000 00014c 000031 00 0 0 1
ELF64-NEXT: [ 6] .symtab SYMTAB 0000000000000000 000380 000090 18 7 4 8
ELF64-NEXT: [ 7] .strtab STRTAB 0000000000000000 000410 00001b 00 0 0 1
ELF64-NEXT: Key to Flags:
ELF64-NEXT: W (write), A (alloc), X (execute), M (merge), S (strings), l (large)
ELF64-NEXT: I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
ELF64-NEXT: O (extra OS processing required) o (OS specific), p (processor specific)

File diff suppressed because it is too large Load Diff

View File

@ -19,13 +19,6 @@ const std::string to_hexString(uint64_t Value, bool UpperCase) {
return stream.str();
}
const std::string to_string(uint64_t Value) {
std::string number;
llvm::raw_string_ostream stream(number);
stream << format_decimal(Value, 1);
return stream.str();
}
void StreamWriter::printBinaryImpl(StringRef Label, StringRef Str,
ArrayRef<uint8_t> Data, bool Block) {
if (Data.size() > 16)

View File

@ -60,7 +60,13 @@ struct HexNumber {
raw_ostream &operator<<(raw_ostream &OS, const HexNumber& Value);
const std::string to_hexString(uint64_t Value, bool UpperCase = true);
const std::string to_string(uint64_t Value);
template <class T> const std::string to_string(const T &Value) {
std::string number;
llvm::raw_string_ostream stream(number);
stream << Value;
return stream.str();
}
class StreamWriter {
public: