summaryrefslogtreecommitdiffstats
path: root/lld/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lld/lib')
-rw-r--r--lld/lib/Core/DefinedAtom.cpp7
-rw-r--r--lld/lib/Core/Reader.cpp1
-rw-r--r--lld/lib/Core/Resolver.cpp43
-rw-r--r--lld/lib/Core/SymbolTable.cpp19
-rw-r--r--lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp48
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
OpenPOWER on IntegriCloud