Revert "[PECOFF] Support COMDAT associative sections."
authorRui Ueyama <ruiu@google.com>
Thu, 5 Jun 2014 07:40:59 +0000 (07:40 +0000)
committerRui Ueyama <ruiu@google.com>
Thu, 5 Jun 2014 07:40:59 +0000 (07:40 +0000)
This reverts accidental commit r210240.

llvm-svn: 210243

lld/include/lld/Core/Reference.h
lld/lib/ReaderWriter/PECOFF/Atoms.h
lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
lld/lib/ReaderWriter/Reader.cpp
lld/test/pecoff/Inputs/associative1.obj.yaml [deleted file]
lld/test/pecoff/Inputs/associative3.obj.yaml [deleted file]
lld/test/pecoff/associative.test [deleted file]

index ee0d88b..c5580ef 100644 (file)
@@ -91,8 +91,6 @@ public:
     kindLayoutBefore = 3,
     // kindGroupChild is treated as a bidirected edge too.
     kindGroupChild = 4,
-    // kindAssociate prevents a referenced atom from being dead-stripped.
-    kindAssociate = 5,
   };
 
   // A value to be added to the value of a target
index 7cd7495..c4ae127 100644 (file)
@@ -167,13 +167,6 @@ public:
   uint64_t ordinal() const override { return _ordinal; }
   Alignment alignment() const override { return _alignment; }
 
-  void associate(COFFDefinedFileAtom *other) {
-    auto *r = new COFFReference(other, 0, Reference::kindAssociate,
-                               Reference::KindNamespace::all,
-                               Reference::KindArch::all);
-    addReference(std::unique_ptr<COFFReference>(r));
-  }
-
 private:
   StringRef _sectionName;
   Scope _scope;
index 069c710..4752097 100644 (file)
@@ -172,9 +172,6 @@ private:
   // A map to get whether the section allows its contents to be merged or not.
   std::map<const coff_section *, DefinedAtom::Merge> _merge;
 
-  // COMDAT associative sections
-  std::map<const coff_section *, std::set<const coff_section *>> _association;
-
   // A sorted map to find an atom from a section and an offset within
   // the section.
   std::map<const coff_section *,
@@ -543,7 +540,6 @@ error_code FileCOFF::cacheSectionAttributes() {
   // section. It feels to me that it's unnecessarily complicated, but this is
   // how COFF works.
   for (auto i : _auxSymbol) {
-    // Read a section from the file
     const coff_symbol *sym = i.first;
     if (sym->SectionNumber == llvm::COFF::IMAGE_SYM_ABSOLUTE ||
         sym->SectionNumber == llvm::COFF::IMAGE_SYM_UNDEFINED)
@@ -552,22 +548,19 @@ error_code FileCOFF::cacheSectionAttributes() {
     const coff_section *sec;
     if (error_code ec = _obj->getSection(sym->SectionNumber, sec))
       return ec;
-    const coff_aux_section_definition *aux =
-      reinterpret_cast<const coff_aux_section_definition *>(i.second);
 
-    if (sec->Characteristics & llvm::COFF::IMAGE_SCN_LNK_COMDAT) {
-      // Read aux symbol data.
-      _comdatSections.insert(sec);
-      _merge[sec] = getMerge(aux);
-    }
+    if (_merge.count(sec))
+      continue;
+    if (!(sec->Characteristics & llvm::COFF::IMAGE_SCN_LNK_COMDAT))
+      continue;
 
-    // Handle associative sections.
-    if (aux->Selection == llvm::COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE) {
-      const coff_section *parent;
-      if (error_code ec = _obj->getSection(aux->Number, parent))
-       return ec;
-      _association[parent].insert(sec);
-    }
+    _comdatSections.insert(sec);
+
+    if (sym->NumberOfAuxSymbols == 0)
+      return llvm::object::object_error::parse_failed;
+    const coff_aux_section_definition *aux =
+        reinterpret_cast<const coff_aux_section_definition *>(i.second);
+    _merge[sec] = getMerge(aux);
   }
 
   // The sections that does not have auxiliary symbol are regular sections, in
@@ -701,28 +694,6 @@ error_code FileCOFF::AtomizeDefinedSymbols(
       definedAtoms.push_back(atom);
     }
   }
-
-  // A COMDAT section with SELECT_ASSOCIATIVE attribute refer to other
-  // section. They need to be linked to a binary or dead stripped as a group.
-  // Here We add a kindAssociate edge between them, so that if a target section
-  // is linked, the other is also linked.
-  //
-  // In a typical use case, parent is a comdat BSS section, and a child is a
-  // static initializer for the data.
-  for (auto i : _association) {
-    const coff_section *parent = i.first;
-    const std::set<const coff_section *> &childSections = i.second;
-    assert(_sectionAtoms[parent].size() > 0);
-
-    COFFDefinedFileAtom *p = _sectionAtoms[parent][0];
-    for (const coff_section *sec : childSections) {
-      if (_sectionAtoms.count(sec)) {
-       assert(_sectionAtoms[sec].size() > 0);
-       p->associate(_sectionAtoms[sec][0]);
-      }
-    }
-  }
-
   return error_code();
 }
 
index 644acd7..ce81c69 100644 (file)
@@ -52,7 +52,6 @@ static const Registry::KindStrings kindStrings[] = {
     {Reference::kindLayoutAfter, "layout-after"},
     {Reference::kindLayoutBefore, "layout-before"},
     {Reference::kindGroupChild, "group-child"},
-    {Reference::kindAssociate, "associate"},
     LLD_KIND_STRING_END};
 
 Registry::Registry() {
diff --git a/lld/test/pecoff/Inputs/associative1.obj.yaml b/lld/test/pecoff/Inputs/associative1.obj.yaml
deleted file mode 100644 (file)
index 51a7be0..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
----
-header:
-  Machine:         IMAGE_FILE_MACHINE_I386
-  Characteristics: []
-sections:
-  - Name:            .data
-    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
-    Alignment:       4
-    SectionData:     00000000
-  - Name:            '.CRT$XCU'
-    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
-    Alignment:       4
-    SectionData:     77777777
-symbols:
-  - Name:            .data
-    Value:           0
-    SectionNumber:   1
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-    SectionDefinition:
-      Length:          4
-      NumberOfRelocations: 0
-      NumberOfLinenumbers: 0
-      CheckSum:        0
-      Number:          0
-      Selection:       IMAGE_COMDAT_SELECT_ANY
-  - Name:            _var
-    Value:           0
-    SectionNumber:   1
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
-  - Name:            '.CRT$XCU'
-    Value:           0
-    SectionNumber:   2
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-    SectionDefinition:
-      Length:          4
-      NumberOfRelocations: 0
-      NumberOfLinenumbers: 0
-      CheckSum:        0
-      Number:          1
-      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
-  - Name:            _init
-    Value:           0
-    SectionNumber:   2
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/lld/test/pecoff/Inputs/associative3.obj.yaml b/lld/test/pecoff/Inputs/associative3.obj.yaml
deleted file mode 100644 (file)
index ffea761..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
----
-header:
-  Machine:         IMAGE_FILE_MACHINE_I386
-  Characteristics: []
-sections:
-  - Name:            .text
-    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
-    Alignment:       4
-    SectionData:     0000000000000000
-    Relocations:
-      - VirtualAddress:  4
-        SymbolName:      _var
-        Type:            IMAGE_REL_I386_DIR32
-symbols:
-  - Name:            .text
-    Value:           0
-    SectionNumber:   1
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-  - Name:            _main
-    Value:           0
-    SectionNumber:   1
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
-  - Name:            _var
-    Value:           0
-    SectionNumber:   0
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/lld/test/pecoff/associative.test b/lld/test/pecoff/associative.test
deleted file mode 100644 (file)
index f998bef..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# RUN: yaml2obj %p/Inputs/associative1.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/associative1.obj.yaml > %t2.obj
-# RUN: yaml2obj %p/Inputs/associative3.obj.yaml > %t3.obj
-#
-# RUN: lld -flavor link /machine:x86 /subsystem:console /entry:main \
-# RUN:   /out:%t.exe -- %t1.obj %t2.obj %t3.obj
-# RUN: obj2yaml %t.exe | FileCheck %s
-
-CHECK: - Name: .CRT
-CHECK:   SectionData: '77777777'