Skip to content

Commit

Permalink
[llvm-readobj] Unwrap the value first to avoid the error
Browse files Browse the repository at this point in the history
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
  • Loading branch information
petrhosek committed Aug 17, 2019
1 parent 43c8b19 commit 0b5ecef
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 26 deletions.
10 changes: 5 additions & 5 deletions llvm/test/tools/llvm-readobj/gnu-notes.test
Expand Up @@ -24,7 +24,7 @@

# LLVM: Notes [
# LLVM-NEXT: NoteSection {
# LLVM-NEXT: Offset: 0x200
# LLVM-NEXT: Offset: 0x238
# LLVM-NEXT: Size: 0x20
# LLVM-NEXT: Note {
# LLVM-NEXT: Owner: GNU
Expand All @@ -35,7 +35,7 @@
# LLVM-NEXT: }
# LLVM-NEXT: }
# LLVM-NEXT: NoteSection {
# LLVM-NEXT: Offset: 0x220
# LLVM-NEXT: Offset: 0x258
# LLVM-NEXT: Size: 0x20
# LLVM-NEXT: Note {
# LLVM-NEXT: Owner: GNU
Expand All @@ -45,7 +45,7 @@
# LLVM-NEXT: }
# LLVM-NEXT: }
# LLVM-NEXT: NoteSection {
# LLVM-NEXT: Offset: 0x240
# LLVM-NEXT: Offset: 0x278
# LLVM-NEXT: Size: 0x1C
# LLVM-NEXT: Note {
# LLVM-NEXT: Owner: GNU
Expand All @@ -58,7 +58,7 @@

# LLVM-STRIPPED: Notes [
# LLVM-STRIPPED-NEXT: NoteSection {
# LLVM-STRIPPED-NEXT: Offset: 0x40
# LLVM-STRIPPED-NEXT: Offset: 0x78
# LLVM-STRIPPED-NEXT: Size: 0x20
# LLVM-STRIPPED-NEXT: Note {
# LLVM-STRIPPED-NEXT: Owner: GNU
Expand All @@ -69,7 +69,7 @@
# LLVM-STRIPPED-NEXT: }
# LLVM-STRIPPED-NEXT: ]

# GNU-STRIPPED:Displaying notes found at file offset 0x00000040 with length 0x00000020:
# GNU-STRIPPED:Displaying notes found at file offset 0x00000078 with length 0x00000020:
# GNU-STRIPPED-NEXT: Owner Data size Description
# GNU-STRIPPED-NEXT: GNU 0x00000010 NT_GNU_BUILD_ID (unique build ID bitstring)
# GNU-STRIPPED-NEXT: Build ID: 4fcb712aa6387724a9f465a32cd8c14b
Expand Down
43 changes: 22 additions & 21 deletions llvm/tools/llvm-readobj/ELFDumper.cpp
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 0b5ecef

Please sign in to comment.