[obj2yaml] - Better dumping for relocations without symbols associated.

This just reorders the code and removes an assignment
of an empty string for the case when a relocation has
no symbol associated. With this our output becomes
cleaner and shorter.

Differential revision: https://reviews.llvm.org/D69255
This commit is contained in:
georgerim 2019-10-25 12:28:33 +03:00
parent 791ddaf763
commit 0dde941ced
4 changed files with 11 additions and 109 deletions

View File

@ -16,280 +16,188 @@
# CHECK-NEXT: EntSize: 0x0000000000000018
# CHECK-NEXT: Relocations:
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_NONE
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR32
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR24
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR16
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR16_LO
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR16_HI
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR16_HA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR14
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR14_BRTAKEN
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR14_BRNTAKEN
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_REL24
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_REL14
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_REL14_BRTAKEN
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_REL14_BRNTAKEN
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT16
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT16_LO
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT16_HI
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT16_HA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GLOB_DAT
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_JMP_SLOT
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_RELATIVE
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_REL32
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR64
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR16_HIGHER
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR16_HIGHERA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR16_HIGHEST
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR16_HIGHESTA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_REL64
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TOC16
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TOC16_LO
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TOC16_HI
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TOC16_HA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TOC
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR16_DS
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR16_LO_DS
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT16_DS
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT16_LO_DS
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TOC16_DS
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TOC16_LO_DS
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TLS
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_DTPMOD64
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TPREL16
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TPREL16_LO
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TPREL16_HI
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TPREL16_HA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TPREL64
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_DTPREL16
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_DTPREL16_LO
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_DTPREL16_HI
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_DTPREL16_HA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_DTPREL64
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT_TLSGD16
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT_TLSGD16_LO
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT_TLSGD16_HI
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT_TLSGD16_HA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT_TLSLD16
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT_TLSLD16_LO
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT_TLSLD16_HI
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT_TLSLD16_HA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT_TPREL16_DS
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT_TPREL16_LO_DS
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT_TPREL16_HI
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT_TPREL16_HA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT_DTPREL16_DS
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT_DTPREL16_LO_DS
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT_DTPREL16_HI
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_GOT_DTPREL16_HA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TPREL16_DS
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TPREL16_LO_DS
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TPREL16_HIGHER
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TPREL16_HIGHERA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TPREL16_HIGHEST
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TPREL16_HIGHESTA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_DTPREL16_DS
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_DTPREL16_LO_DS
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_DTPREL16_HIGHER
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_DTPREL16_HIGHERA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_DTPREL16_HIGHEST
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_DTPREL16_HIGHESTA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TLSGD
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TLSLD
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR16_HIGH
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_ADDR16_HIGHA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TPREL16_HIGH
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_TPREL16_HIGHA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_DTPREL16_HIGH
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_DTPREL16_HIGHA
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_IRELATIVE
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_REL16
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_REL16_LO
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_REL16_HI
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_PPC64_REL16_HA
--- !ELF

View File

@ -21,10 +21,8 @@
# CHECK-NEXT: Info: .text
# CHECK-NEXT: Relocations:
# CHECK-NEXT: - Offset: 0x0000000000000000
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_X86_64_NONE
# CHECK-NEXT: - Offset: 0x0000000000000004
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: R_X86_64_NONE
# CHECK-NEXT: Symbols: []
# CHECK-NEXT: ...

View File

@ -16,10 +16,8 @@
# CHECK-NEXT: EntSize: 0x0000000000000018
# CHECK-NEXT: Relocations:
# CHECK-NEXT: - Offset: 0x0000000000000001
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: 0x00000002
# CHECK-NEXT: - Offset: 0x0000000000000003
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: 0x00000004
--- !ELF

View File

@ -409,27 +409,25 @@ Error ELFDumper<ELFT>::dumpRelocation(const RelT *Rel, const Elf_Shdr *SymTab,
auto SymOrErr = Obj.getRelocationSymbol(Rel, SymTab);
if (!SymOrErr)
return SymOrErr.takeError();
// We have might have a relocation with symbol index 0,
// e.g. R_X86_64_NONE or R_X86_64_GOTPC32.
const Elf_Sym *Sym = *SymOrErr;
if (!Sym)
return Error::success();
auto StrTabSec = Obj.getSection(SymTab->sh_link);
if (!StrTabSec)
return StrTabSec.takeError();
auto StrTabOrErr = Obj.getStringTable(*StrTabSec);
if (!StrTabOrErr)
return StrTabOrErr.takeError();
StringRef StrTab = *StrTabOrErr;
if (Sym) {
Expected<StringRef> NameOrErr = getUniquedSymbolName(Sym, StrTab, SymTab);
if (!NameOrErr)
return NameOrErr.takeError();
R.Symbol = NameOrErr.get();
} else {
// We have some edge cases of relocations without a symbol associated,
// e.g. an object containing the invalid (according to the System V
// ABI) R_X86_64_NONE reloc. Create a symbol with an empty name instead
// of crashing.
R.Symbol = "";
}
Expected<StringRef> NameOrErr =
getUniquedSymbolName(Sym, *StrTabOrErr, SymTab);
if (!NameOrErr)
return NameOrErr.takeError();
R.Symbol = NameOrErr.get();
return Error::success();
}