]> granicus.if.org Git - llvm/commitdiff
[llvm-readobj] Unwrap the value first to avoid the error
authorPetr Hosek <phosek@chromium.org>
Sat, 17 Aug 2019 00:07:26 +0000 (00:07 +0000)
committerPetr Hosek <phosek@chromium.org>
Sat, 17 Aug 2019 00:07:26 +0000 (00:07 +0000)
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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369177 91177308-0d34-0410-b5e6-96231b3b80d8

test/tools/llvm-readobj/gnu-notes.test
tools/llvm-readobj/ELFDumper.cpp

index dbd869c3a6ee003202646579ec4c2f7fa78ba877..b72a6e3a9e652d0039ef7962dc09d2ca431e0bce 100644 (file)
@@ -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
index 1e24504afd46113f0aa00d94edc1b593d95dfd96..6dbe36e0efa7b4a26005aa9659b4e6fc3bded9d4 100644 (file)
@@ -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);