summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShankar Easwaran <shankare@codeaurora.org>2013-10-09 07:32:47 +0000
committerShankar Easwaran <shankare@codeaurora.org>2013-10-09 07:32:47 +0000
commit49408ece479c3bf4a7c4537645442e8e1cca89e5 (patch)
treeb6391d170767286696f67866000a7edc8bc745ef
parent2d0d180ab48f86525469f957702bbd4673b8816a (diff)
downloadbcm5719-llvm-49408ece479c3bf4a7c4537645442e8e1cca89e5.tar.gz
bcm5719-llvm-49408ece479c3bf4a7c4537645442e8e1cca89e5.zip
[Layout] Dont set ordinals to Files by default.
This change removes code in various places which was setting the File Ordinals. This is because the file ordinals are assigned by the way files are resolved. There was no other way than making the getNextFileAndOrdinal be set const and change the _nextOrdinal to mutable. There are so many places in code, that you would need to cleanup to make LinkingContext non-const! llvm-svn: 192280
-rw-r--r--lld/include/lld/Core/File.h3
-rw-r--r--lld/include/lld/Core/LinkingContext.h4
-rw-r--r--lld/include/lld/ReaderWriter/Simple.h5
-rw-r--r--lld/lib/Core/Resolver.cpp1
-rw-r--r--lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp6
-rw-r--r--lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp4
-rw-r--r--lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp10
7 files changed, 18 insertions, 15 deletions
diff --git a/lld/include/lld/Core/File.h b/lld/include/lld/Core/File.h
index 9010978eeae..26345c76aed 100644
--- a/lld/include/lld/Core/File.h
+++ b/lld/include/lld/Core/File.h
@@ -220,7 +220,8 @@ protected:
static atom_collection_empty<SharedLibraryAtom> _noSharedLibraryAtoms;
static atom_collection_empty<AbsoluteAtom> _noAbsoluteAtoms;
- StringRef _path;
+private:
+ StringRef _path;
Kind _kind;
mutable uint64_t _ordinal;
};
diff --git a/lld/include/lld/Core/LinkingContext.h b/lld/include/lld/Core/LinkingContext.h
index 220d4c01cb2..fb3bec6f79e 100644
--- a/lld/include/lld/Core/LinkingContext.h
+++ b/lld/include/lld/Core/LinkingContext.h
@@ -316,7 +316,7 @@ public:
virtual void setResolverState(uint32_t resolverState);
/// Return the next ordinal and Increment it.
- virtual uint64_t getNextOrdinalAndIncrement() { return _nextOrdinal++; }
+ virtual uint64_t getNextOrdinalAndIncrement() const { return _nextOrdinal++; }
/// @}
@@ -367,7 +367,7 @@ protected:
std::unique_ptr<InputGraph> _inputGraph;
mutable llvm::BumpPtrAllocator _allocator;
InputElement *_currentInputElement;
- uint64_t _nextOrdinal;
+ mutable uint64_t _nextOrdinal;
private:
/// Validate the subclass bits. Only called by validate.
diff --git a/lld/include/lld/ReaderWriter/Simple.h b/lld/include/lld/ReaderWriter/Simple.h
index d68e9a934d1..c7d4bef3919 100644
--- a/lld/include/lld/ReaderWriter/Simple.h
+++ b/lld/include/lld/ReaderWriter/Simple.h
@@ -24,10 +24,7 @@ namespace lld {
class SimpleFile : public MutableFile {
public:
SimpleFile(const LinkingContext &context, StringRef path)
- : MutableFile(context, path) {
- static uint32_t lastOrdinal = 0;
- _ordinal = lastOrdinal++;
- }
+ : MutableFile(context, path) {}
virtual void addAtom(const Atom &atom) {
if (const DefinedAtom *defAtom = dyn_cast<DefinedAtom>(&atom)) {
diff --git a/lld/lib/Core/Resolver.cpp b/lld/lib/Core/Resolver.cpp
index 1147bc55236..ecf2687b357 100644
--- a/lld/lib/Core/Resolver.cpp
+++ b/lld/lib/Core/Resolver.cpp
@@ -299,6 +299,7 @@ void Resolver::resolveUndefines() {
if (error_code(nextFile) == InputGraphError::no_more_files)
break;
if (nextFile->kind() == File::kindObject) {
+ assert(!nextFile->hasOrdinal());
nextFile->setOrdinal(_context.getNextOrdinalAndIncrement());
handleFile(*nextFile);
}
diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp
index ddca2b28f0e..beed2373cce 100644
--- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp
+++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp
@@ -62,9 +62,8 @@ public:
class HexagonInitFiniFile : public SimpleFile {
public:
- HexagonInitFiniFile(const ELFLinkingContext &context):
- SimpleFile(context, "command line option -init/-fini")
- {}
+ HexagonInitFiniFile(const ELFLinkingContext &context)
+ : SimpleFile(context, "command line option -init/-fini"), _ordinal(0) {}
void addInitFunction(StringRef name) {
Atom *initFunctionAtom = new (_allocator) SimpleUndefinedAtom(*this, name);
@@ -88,6 +87,7 @@ public:
private:
llvm::BumpPtrAllocator _allocator;
+ uint64_t _ordinal;
};
}
diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
index 29b23dd74db..7c918877fc2 100644
--- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
+++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
@@ -107,7 +107,9 @@ public:
class ELFPassFile : public SimpleFile {
public:
- ELFPassFile(const ELFLinkingContext &eti) : SimpleFile(eti, "ELFPassFile") {}
+ ELFPassFile(const ELFLinkingContext &eti) : SimpleFile(eti, "ELFPassFile") {
+ setOrdinal(eti.getNextOrdinalAndIncrement());
+ }
llvm::BumpPtrAllocator _alloc;
};
diff --git a/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp b/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp
index 5be3d5ea6ca..5aeb1f95ac6 100644
--- a/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp
+++ b/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp
@@ -78,7 +78,9 @@ public:
class ELFPassFile : public SimpleFile {
public:
- ELFPassFile(const ELFLinkingContext &eti) : SimpleFile(eti, "ELFPassFile") {}
+ ELFPassFile(const ELFLinkingContext &eti) : SimpleFile(eti, "ELFPassFile") {
+ setOrdinal(eti.getNextOrdinalAndIncrement());
+ }
llvm::BumpPtrAllocator _alloc;
};
@@ -478,9 +480,8 @@ public:
class X86_64InitFiniFile : public SimpleFile {
public:
- X86_64InitFiniFile(const ELFLinkingContext &context):
- SimpleFile(context, "command line option -init/-fini")
- {}
+ X86_64InitFiniFile(const ELFLinkingContext &context)
+ : SimpleFile(context, "command line option -init/-fini"), _ordinal(0) {}
void addInitFunction(StringRef name) {
Atom *initFunctionAtom = new (_allocator) SimpleUndefinedAtom(*this, name);
@@ -504,6 +505,7 @@ public:
private:
llvm::BumpPtrAllocator _allocator;
+ uint64_t _ordinal;
};
} // end anon namespace
OpenPOWER on IntegriCloud