return getSectionContentsAsArray<Elf_Sym>(Sec);
}
- Elf_Rela_Range relas(const Elf_Shdr *Sec) const {
- auto V = getSectionContentsAsArray<Elf_Rela>(Sec);
- if (!V)
- report_fatal_error(V.getError().message());
- return *V;
+ ErrorOr<Elf_Rela_Range> relas(const Elf_Shdr *Sec) const {
+ return getSectionContentsAsArray<Elf_Rela>(Sec);
}
- Elf_Rel_Range rels(const Elf_Shdr *Sec) const {
- auto V = getSectionContentsAsArray<Elf_Rel>(Sec);
- if (!V)
- report_fatal_error(V.getError().message());
- return *V;
+ ErrorOr<Elf_Rel_Range> rels(const Elf_Shdr *Sec) const {
+ return getSectionContentsAsArray<Elf_Rel>(Sec);
}
/// \brief Iterate over program header table.
switch (PLTRelShdr->sh_type) {
case ELF::SHT_REL:
- for (const Elf_Rel &Rel : Obj->rels(PLTRelShdr)) {
+ for (const Elf_Rel &Rel : unwrapOrError(Obj->rels(PLTRelShdr))) {
const Elf_Sym *Sym =
unwrapOrError(Obj->getRelocationSymbol(&Rel, SymTable));
printPLTEntry(PLTShdr->sh_addr, PLTBegin, It, StrTable, Sym);
}
break;
case ELF::SHT_RELA:
- for (const Elf_Rela &Rel : Obj->relas(PLTRelShdr)) {
+ for (const Elf_Rela &Rel : unwrapOrError(Obj->relas(PLTRelShdr))) {
const Elf_Sym *Sym =
unwrapOrError(Obj->getRelocationSymbol(&Rel, SymTable));
printPLTEntry(PLTShdr->sh_addr, PLTBegin, It, StrTable, Sym);
printRelocHeader(OS, ELFT::Is64Bits, (Sec.sh_type == ELF::SHT_RELA));
const Elf_Shdr *SymTab = unwrapOrError(Obj->getSection(Sec.sh_link));
if (Sec.sh_type == ELF::SHT_REL) {
- for (const auto &R : Obj->rels(&Sec)) {
+ for (const auto &R : unwrapOrError(Obj->rels(&Sec))) {
Elf_Rela Rela;
Rela.r_offset = R.r_offset;
Rela.r_info = R.r_info;
printRelocation(Obj, SymTab, Rela, false);
}
} else {
- for (const auto &R : Obj->relas(&Sec))
+ for (const auto &R : unwrapOrError(Obj->relas(&Sec)))
printRelocation(Obj, SymTab, R, true);
}
}
switch (Sec->sh_type) {
case ELF::SHT_REL:
- for (const Elf_Rel &R : Obj->rels(Sec)) {
+ for (const Elf_Rel &R : unwrapOrError(Obj->rels(Sec))) {
Elf_Rela Rela;
Rela.r_offset = R.r_offset;
Rela.r_info = R.r_info;
}
break;
case ELF::SHT_RELA:
- for (const Elf_Rela &R : Obj->relas(Sec))
+ for (const Elf_Rela &R : unwrapOrError(Obj->relas(Sec)))
printRelocation(Obj, R, SymTab);
break;
}
return EC;
const Elf_Shdr *SymTab = *SymTabOrErr;
- for (const Elf_Rel &Rel : Obj.rels(Shdr)) {
+ auto Rels = Obj.rels(Shdr);
+ if (std::error_code EC = Rels.getError())
+ return EC;
+ for (const Elf_Rel &Rel : *Rels) {
ELFYAML::Relocation R;
if (std::error_code EC = dumpRelocation(&Rel, SymTab, R))
return EC;
return EC;
const Elf_Shdr *SymTab = *SymTabOrErr;
- for (const Elf_Rela &Rel : Obj.relas(Shdr)) {
+ auto Rels = Obj.relas(Shdr);
+ if (std::error_code EC = Rels.getError())
+ return EC;
+ for (const Elf_Rela &Rel : *Rels) {
ELFYAML::Relocation R;
if (std::error_code EC = dumpRelocation(&Rel, SymTab, R))
return EC;