]> granicus.if.org Git - llvm/commitdiff
Reland r319090, "COFF: Do not create SectionChunks for discarded comdat sections...
authorPeter Collingbourne <peter@pcc.me.uk>
Tue, 28 Nov 2017 01:30:07 +0000 (01:30 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Tue, 28 Nov 2017 01:30:07 +0000 (01:30 +0000)
If /debug was not specified, readSection will return a null
pointer for debug sections. If the debug section is associative with
another section, we need to make sure that the section returned from
readSection is not a null pointer before adding it as an associative
section.

Differential Revision: https://reviews.llvm.org/D40533

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

include/llvm/Object/COFF.h

index 3ad60b05b6f5757f6ba6bb72a30232a4501ad655..2fb896eed97b3ea81162bce9b81c9a0e396dcefc 100644 (file)
@@ -275,6 +275,8 @@ struct coff_symbol_generic {
   support::ulittle32_t Value;
 };
 
+struct coff_aux_section_definition;
+
 class COFFSymbolRef {
 public:
   COFFSymbolRef() = default;
@@ -346,6 +348,18 @@ public:
     return (getType() & 0xF0) >> COFF::SCT_COMPLEX_TYPE_SHIFT;
   }
 
+  template <typename T> const T *getAux() const {
+    return CS16 ? reinterpret_cast<const T *>(CS16 + 1)
+                : reinterpret_cast<const T *>(CS32 + 1);
+  }
+
+  const coff_aux_section_definition *getSectionDefinition() const {
+    if (!getNumberOfAuxSymbols() ||
+        getStorageClass() != COFF::IMAGE_SYM_CLASS_STATIC)
+      return nullptr;
+    return getAux<coff_aux_section_definition>();
+  }
+
   bool isAbsolute() const {
     return getSectionNumber() == -1;
   }