[lld] r210243 - Revert "[PECOFF] Support COMDAT associative sections."

Rui Ueyama ruiu at google.com
Thu Jun 5 00:40:59 PDT 2014


Author: ruiu
Date: Thu Jun  5 02:40:59 2014
New Revision: 210243

URL: http://llvm.org/viewvc/llvm-project?rev=210243&view=rev
Log:
Revert "[PECOFF] Support COMDAT associative sections."

This reverts accidental commit r210240.

Removed:
    lld/trunk/test/pecoff/Inputs/associative1.obj.yaml
    lld/trunk/test/pecoff/Inputs/associative3.obj.yaml
    lld/trunk/test/pecoff/associative.test
Modified:
    lld/trunk/include/lld/Core/Reference.h
    lld/trunk/lib/ReaderWriter/PECOFF/Atoms.h
    lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
    lld/trunk/lib/ReaderWriter/Reader.cpp

Modified: lld/trunk/include/lld/Core/Reference.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/Reference.h?rev=210243&r1=210242&r2=210243&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/Reference.h (original)
+++ lld/trunk/include/lld/Core/Reference.h Thu Jun  5 02:40:59 2014
@@ -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

Modified: lld/trunk/lib/ReaderWriter/PECOFF/Atoms.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/Atoms.h?rev=210243&r1=210242&r2=210243&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/Atoms.h (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/Atoms.h Thu Jun  5 02:40:59 2014
@@ -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;

Modified: lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp?rev=210243&r1=210242&r2=210243&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp Thu Jun  5 02:40:59 2014
@@ -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::cacheSectionAttribu
   // 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::cacheSectionAttribu
     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::AtomizeDefinedSymbo
       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();
 }
 

Modified: lld/trunk/lib/ReaderWriter/Reader.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/Reader.cpp?rev=210243&r1=210242&r2=210243&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/Reader.cpp (original)
+++ lld/trunk/lib/ReaderWriter/Reader.cpp Thu Jun  5 02:40:59 2014
@@ -52,7 +52,6 @@ static const Registry::KindStrings kindS
     {Reference::kindLayoutAfter, "layout-after"},
     {Reference::kindLayoutBefore, "layout-before"},
     {Reference::kindGroupChild, "group-child"},
-    {Reference::kindAssociate, "associate"},
     LLD_KIND_STRING_END};
 
 Registry::Registry() {

Removed: lld/trunk/test/pecoff/Inputs/associative1.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/associative1.obj.yaml?rev=210242&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/associative1.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/associative1.obj.yaml (removed)
@@ -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
-...

Removed: lld/trunk/test/pecoff/Inputs/associative3.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/associative3.obj.yaml?rev=210242&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/associative3.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/associative3.obj.yaml (removed)
@@ -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
-...

Removed: lld/trunk/test/pecoff/associative.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/associative.test?rev=210242&view=auto
==============================================================================
--- lld/trunk/test/pecoff/associative.test (original)
+++ lld/trunk/test/pecoff/associative.test (removed)
@@ -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'





More information about the llvm-commits mailing list