diff options
Diffstat (limited to 'lld/lib')
-rw-r--r-- | lld/lib/Core/DefinedAtom.cpp | 7 | ||||
-rw-r--r-- | lld/lib/Core/Reader.cpp | 1 | ||||
-rw-r--r-- | lld/lib/Core/Resolver.cpp | 43 | ||||
-rw-r--r-- | lld/lib/Core/SymbolTable.cpp | 19 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp | 48 |
5 files changed, 3 insertions, 115 deletions
diff --git a/lld/lib/Core/DefinedAtom.cpp b/lld/lib/Core/DefinedAtom.cpp index 09c52f85ae5..8dc4d4a16f9 100644 --- a/lld/lib/Core/DefinedAtom.cpp +++ b/lld/lib/Core/DefinedAtom.cpp @@ -41,8 +41,6 @@ DefinedAtom::ContentPermissions DefinedAtom::permissions(ContentType type) { case typeDTraceDOF: case typeCompactUnwindInfo: case typeProcessedUnwindInfo: - case typeRONote: - case typeNoAlloc: case typeObjCImageInfo: case typeObjCMethodList: return permR__; @@ -56,7 +54,6 @@ DefinedAtom::ContentPermissions DefinedAtom::permissions(ContentType type) { case typeLazyDylibPointer: case typeNonLazyPointer: case typeThunkTLV: - case typeRWNote: return permRW_; case typeGOT: @@ -71,12 +68,8 @@ DefinedAtom::ContentPermissions DefinedAtom::permissions(ContentType type) { case typeTLVInitialData: case typeTLVInitialZeroFill: case typeTLVInitializerPtr: - case typeThreadData: - case typeThreadZeroFill: return permRW_L; - case typeGroupComdat: - case typeGnuLinkOnce: case typeUnknown: case typeTempLTO: case typeSectCreate: diff --git a/lld/lib/Core/Reader.cpp b/lld/lib/Core/Reader.cpp index 6069093d211..107db07891d 100644 --- a/lld/lib/Core/Reader.cpp +++ b/lld/lib/Core/Reader.cpp @@ -47,7 +47,6 @@ Registry::loadFile(std::unique_ptr<MemoryBuffer> mb) const { static const Registry::KindStrings kindStrings[] = { {Reference::kindLayoutAfter, "layout-after"}, - {Reference::kindGroupChild, "group-child"}, {Reference::kindAssociate, "associate"}, LLD_KIND_STRING_END}; diff --git a/lld/lib/Core/Resolver.cpp b/lld/lib/Core/Resolver.cpp index 5f70ae27454..840cbbe1d67 100644 --- a/lld/lib/Core/Resolver.cpp +++ b/lld/lib/Core/Resolver.cpp @@ -154,39 +154,6 @@ bool Resolver::doUndefinedAtom(const UndefinedAtom &atom) { return newUndefAdded; } -/// \brief Add the section group and the group-child reference members. -void Resolver::maybeAddSectionGroupOrGnuLinkOnce(const DefinedAtom &atom) { - // First time adding a group? - bool isFirstTime = _symbolTable.addGroup(atom); - - if (!isFirstTime) { - // If duplicate symbols are allowed, select the first group. - if (_ctx.getAllowDuplicates()) - return; - auto *prevGroup = dyn_cast<DefinedAtom>(_symbolTable.findGroup(atom.name())); - assert(prevGroup && - "Internal Error: The group atom could only be a defined atom"); - // The atoms should be of the same content type, reject invalid group - // resolution behaviors. - if (atom.contentType() == prevGroup->contentType()) - return; - llvm::errs() << "SymbolTable: error while merging " << atom.name() - << "\n"; - llvm::report_fatal_error("duplicate symbol error"); - } - - for (const Reference *r : atom) { - if (r->kindNamespace() == lld::Reference::KindNamespace::all && - r->kindValue() == lld::Reference::kindGroupChild) { - const DefinedAtom *target = dyn_cast<DefinedAtom>(r->target()); - assert(target && "Internal Error: kindGroupChild references need to " - "be associated with Defined Atoms only"); - _atoms.push_back(target); - _symbolTable.add(*target); - } - } -} - // Called on each atom when a file is added. Returns true if a given // atom is added to the symbol table. void Resolver::doDefinedAtom(const DefinedAtom &atom) { @@ -205,12 +172,7 @@ void Resolver::doDefinedAtom(const DefinedAtom &atom) { // add to list of known atoms _atoms.push_back(&atom); - - if (atom.isGroupParent()) { - maybeAddSectionGroupOrGnuLinkOnce(atom); - } else { - _symbolTable.add(atom); - } + _symbolTable.add(atom); // An atom that should never be dead-stripped is a dead-strip root. if (_ctx.deadStrip() && atom.deadStrip() == DefinedAtom::deadStripNever) { @@ -439,8 +401,7 @@ void Resolver::markLive(const Atom *atom) { static bool isBackref(const Reference *ref) { if (ref->kindNamespace() != lld::Reference::KindNamespace::all) return false; - return (ref->kindValue() == lld::Reference::kindLayoutAfter || - ref->kindValue() == lld::Reference::kindGroupChild); + return (ref->kindValue() == lld::Reference::kindLayoutAfter); } // remove all atoms not actually used diff --git a/lld/lib/Core/SymbolTable.cpp b/lld/lib/Core/SymbolTable.cpp index b85a83ffbfe..9382db9af25 100644 --- a/lld/lib/Core/SymbolTable.cpp +++ b/lld/lib/Core/SymbolTable.cpp @@ -55,25 +55,6 @@ bool SymbolTable::add(const DefinedAtom &atom) { return false; } -const Atom *SymbolTable::findGroup(StringRef sym) { - NameToAtom::iterator pos = _groupTable.find(sym); - if (pos == _groupTable.end()) - return nullptr; - return pos->second; -} - -bool SymbolTable::addGroup(const DefinedAtom &da) { - StringRef name = da.name(); - assert(!name.empty()); - const Atom *existing = findGroup(name); - if (existing == nullptr) { - _groupTable[name] = &da; - return true; - } - _replacedAtoms[&da] = existing; - return false; -} - enum NameCollisionResolution { NCR_First, NCR_Second, diff --git a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp index e01130e487f..151d20473b6 100644 --- a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp +++ b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp @@ -178,31 +178,10 @@ public: return nullptr; } - /// \brief Lookup a group parent when there is a reference of type - /// kindGroupChild. If there was no group-parent produce an appropriate - /// error. - const lld::Atom *lookupGroupParent(StringRef name) const { - NameToAtom::const_iterator pos = _groupMap.find(name); - if (pos != _groupMap.end()) - return pos->second; - _io.setError(Twine("no such group name: ") + name); - return nullptr; - } - private: typedef llvm::StringMap<const lld::Atom *> NameToAtom; void add(StringRef name, const lld::Atom *atom) { - if (const lld::DefinedAtom *da = dyn_cast<DefinedAtom>(atom)) { - if (da->isGroupParent()) { - if (_groupMap.count(name)) { - _io.setError(Twine("duplicate group name: ") + name); - } else { - _groupMap[name] = atom; - } - return; - } - } if (_nameMap.count(name)) { _io.setError(Twine("duplicate atom name: ") + name); } else { @@ -212,7 +191,6 @@ private: IO &_io; NameToAtom _nameMap; - NameToAtom _groupMap; }; /// Mapping of Atoms. @@ -435,13 +413,6 @@ template <> struct ScalarEnumerationTraits<lld::DefinedAtom::ContentType> { DefinedAtom::typeTLVInitializerPtr); io.enumCase(value, "mach_header", DefinedAtom::typeMachHeader); io.enumCase(value, "dso_handle", DefinedAtom::typeDSOHandle); - io.enumCase(value, "thread-data", DefinedAtom::typeThreadData); - io.enumCase(value, "thread-zero-fill",DefinedAtom::typeThreadZeroFill); - io.enumCase(value, "ro-note", DefinedAtom::typeRONote); - io.enumCase(value, "rw-note", DefinedAtom::typeRWNote); - io.enumCase(value, "no-alloc", DefinedAtom::typeNoAlloc); - io.enumCase(value, "group-comdat", DefinedAtom::typeGroupComdat); - io.enumCase(value, "gnu-linkonce", DefinedAtom::typeGnuLinkOnce); io.enumCase(value, "sectcreate", DefinedAtom::typeSectCreate); } }; @@ -792,7 +763,7 @@ template <> struct MappingTraits<const lld::DefinedAtom *> { public: NormalizedAtom(IO &io) : _file(fileFromContext(io)), _name(), _refName(), _contentType(), - _alignment(1), _content(), _references(), _isGroupChild(false) { + _alignment(1), _content(), _references() { static uint32_t ordinalCounter = 1; _ordinal = ordinalCounter++; } @@ -856,8 +827,6 @@ template <> struct MappingTraits<const lld::DefinedAtom *> { DynamicExport dynamicExport() const override { return _dynamicExport; } CodeModel codeModel() const override { return _codeModel; } ContentPermissions permissions() const override { return _permissions; } - void setGroupChild(bool val) { _isGroupChild = val; } - bool isGroupChild() const { return _isGroupChild; } ArrayRef<uint8_t> rawContent() const override { if (!occupiesDiskSpace()) return ArrayRef<uint8_t>(); @@ -917,7 +886,6 @@ template <> struct MappingTraits<const lld::DefinedAtom *> { StringRef _sectionName; uint64_t _sectionSize; std::vector<const lld::Reference *> _references; - bool _isGroupChild; }; static void mapping(IO &io, const lld::DefinedAtom *&atom) { @@ -1201,13 +1169,6 @@ MappingTraits<const lld::File *>::NormalizedFile::denormalize(IO &io) { normAtom->bind(nameResolver); } - _definedAtoms._atoms.erase( - std::remove_if(_definedAtoms._atoms.begin(), _definedAtoms._atoms.end(), - [](const DefinedAtom *a) { - return ((const NormalizedAtom *)a)->isGroupChild(); - }), - _definedAtoms._atoms.end()); - return this; } @@ -1223,14 +1184,7 @@ inline void MappingTraits<const lld::DefinedAtom *>::NormalizedAtom::bind( inline void MappingTraits<const lld::Reference *>::NormalizedReference::bind( const RefNameResolver &resolver) { - typedef MappingTraits<const lld::DefinedAtom *>::NormalizedAtom NormalizedAtom; - _target = resolver.lookup(_targetName); - - if (_mappedKind.ns == lld::Reference::KindNamespace::all && - _mappedKind.value == lld::Reference::kindGroupChild) { - ((NormalizedAtom *)const_cast<Atom *>(_target))->setGroupChild(true); - } } inline StringRef |