summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Hosek <phosek@chromium.org>2019-08-17 00:07:26 +0000
committerPetr Hosek <phosek@chromium.org>2019-08-17 00:07:26 +0000
commit0b5ecef299fd7b430ddaace420cb2f10f1846873 (patch)
treecf808150fcd345f3609953aed3bedc8ce4d8c550
parent43c8b19546ae646630898a7b0fe0a517633410de (diff)
downloadbcm5719-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
-rw-r--r--llvm/test/tools/llvm-readobj/gnu-notes.test10
-rw-r--r--llvm/tools/llvm-readobj/ELFDumper.cpp43
2 files changed, 27 insertions, 26 deletions
diff --git a/llvm/test/tools/llvm-readobj/gnu-notes.test b/llvm/test/tools/llvm-readobj/gnu-notes.test
index dbd869c3a6e..b72a6e3a9e6 100644
--- a/llvm/test/tools/llvm-readobj/gnu-notes.test
+++ b/llvm/test/tools/llvm-readobj/gnu-notes.test
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
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);
OpenPOWER on IntegriCloud