diff options
| author | Petr Hosek <phosek@chromium.org> | 2019-08-17 00:07:26 +0000 |
|---|---|---|
| committer | Petr Hosek <phosek@chromium.org> | 2019-08-17 00:07:26 +0000 |
| commit | 0b5ecef299fd7b430ddaace420cb2f10f1846873 (patch) | |
| tree | cf808150fcd345f3609953aed3bedc8ce4d8c550 /llvm/tools/llvm-readobj/ELFDumper.cpp | |
| parent | 43c8b19546ae646630898a7b0fe0a517633410de (diff) | |
| download | bcm5719-llvm-0b5ecef299fd7b430ddaace420cb2f10f1846873.tar.gz bcm5719-llvm-0b5ecef299fd7b430ddaace420cb2f10f1846873.zip | |
[llvm-readobj] Unwrap the value first to avoid the error
This addresses the issue introduced in r369169, we need to unwrap
the value first before we can check whether it's empty. This also
swaps the two branches to put the common path first which should
be NFC.
llvm-svn: 369177
Diffstat (limited to 'llvm/tools/llvm-readobj/ELFDumper.cpp')
| -rw-r--r-- | llvm/tools/llvm-readobj/ELFDumper.cpp | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp index 1e24504afd4..6dbe36e0efa 100644 --- a/llvm/tools/llvm-readobj/ELFDumper.cpp +++ b/llvm/tools/llvm-readobj/ELFDumper.cpp @@ -4502,26 +4502,26 @@ void GNUStyle<ELFT>::printNotes(const ELFFile<ELFT> *Obj) { } }; - if (Obj->getHeader()->e_type == ELF::ET_CORE || Obj->sections()->empty()) { - for (const auto &P : - unwrapOrError(this->FileName, Obj->program_headers())) { - if (P.p_type != PT_NOTE) + ArrayRef<Elf_Shdr> Sections = unwrapOrError(this->FileName, Obj->sections()); + if (Obj->getHeader()->e_type != ELF::ET_CORE && !Sections.empty()) { + for (const auto &S : Sections) { + if (S.sh_type != SHT_NOTE) continue; - PrintHeader(P.p_offset, P.p_filesz); + PrintHeader(S.sh_offset, S.sh_size); Error Err = Error::success(); - for (const auto &Note : Obj->notes(P, Err)) + for (const auto &Note : Obj->notes(S, Err)) ProcessNote(Note); if (Err) reportError(std::move(Err), this->FileName); } } else { - for (const auto &S : - unwrapOrError(this->FileName, Obj->sections())) { - if (S.sh_type != SHT_NOTE) + for (const auto &P : + unwrapOrError(this->FileName, Obj->program_headers())) { + if (P.p_type != PT_NOTE) continue; - PrintHeader(S.sh_offset, S.sh_size); + PrintHeader(P.p_offset, P.p_filesz); Error Err = Error::success(); - for (const auto &Note : Obj->notes(S, Err)) + for (const auto &Note : Obj->notes(P, Err)) ProcessNote(Note); if (Err) reportError(std::move(Err), this->FileName); @@ -5703,27 +5703,28 @@ void LLVMStyle<ELFT>::printNotes(const ELFFile<ELFT> *Obj) { } }; - if (Obj->getHeader()->e_type == ELF::ET_CORE || Obj->sections()->empty()) { - for (const auto &P : - unwrapOrError(this->FileName, Obj->program_headers())) { - if (P.p_type != PT_NOTE) + ArrayRef<Elf_Shdr> Sections = unwrapOrError(this->FileName, Obj->sections()); + if (Obj->getHeader()->e_type != ELF::ET_CORE && !Sections.empty()) { + for (const auto &S : Sections) { + if (S.sh_type != SHT_NOTE) continue; DictScope D(W, "NoteSection"); - PrintHeader(P.p_offset, P.p_filesz); + PrintHeader(S.sh_offset, S.sh_size); Error Err = Error::success(); - for (const auto &Note : Obj->notes(P, Err)) + for (const auto &Note : Obj->notes(S, Err)) ProcessNote(Note); if (Err) reportError(std::move(Err), this->FileName); } } else { - for (const auto &S : unwrapOrError(this->FileName, Obj->sections())) { - if (S.sh_type != SHT_NOTE) + for (const auto &P : + unwrapOrError(this->FileName, Obj->program_headers())) { + if (P.p_type != PT_NOTE) continue; DictScope D(W, "NoteSection"); - PrintHeader(S.sh_offset, S.sh_size); + PrintHeader(P.p_offset, P.p_filesz); Error Err = Error::success(); - for (const auto &Note : Obj->notes(S, Err)) + for (const auto &Note : Obj->notes(P, Err)) ProcessNote(Note); if (Err) reportError(std::move(Err), this->FileName); |

