diff options
| author | Nick Kledzik <kledzik@apple.com> | 2012-03-15 23:36:24 +0000 |
|---|---|---|
| committer | Nick Kledzik <kledzik@apple.com> | 2012-03-15 23:36:24 +0000 |
| commit | f4e2c73fa71cd205324882e0bd1ca48ecd982d55 (patch) | |
| tree | 89d2dc948f9174c05673a0133d50c7c4cd5648af /lld/lib/Core | |
| parent | 6f87b44fe378184316b9e7bfdd2316d3ce80eac7 (diff) | |
| download | bcm5719-llvm-f4e2c73fa71cd205324882e0bd1ca48ecd982d55.tar.gz bcm5719-llvm-f4e2c73fa71cd205324882e0bd1ca48ecd982d55.zip | |
Add Pass to instantiate GOT entries
llvm-svn: 152874
Diffstat (limited to 'lld/lib/Core')
| -rw-r--r-- | lld/lib/Core/NativeReader.cpp | 18 | ||||
| -rw-r--r-- | lld/lib/Core/YamlKeyValues.cpp | 1 | ||||
| -rw-r--r-- | lld/lib/Core/YamlReader.cpp | 4 | ||||
| -rw-r--r-- | lld/lib/Core/YamlWriter.cpp | 3 |
4 files changed, 25 insertions, 1 deletions
diff --git a/lld/lib/Core/NativeReader.cpp b/lld/lib/Core/NativeReader.cpp index 0eb95b948d7..41a2823c7b8 100644 --- a/lld/lib/Core/NativeReader.cpp +++ b/lld/lib/Core/NativeReader.cpp @@ -200,11 +200,22 @@ public: return _ivarData->kind; } + virtual void setKind(Kind); virtual const Atom* target() const; virtual Addend addend() const; virtual void setTarget(const Atom* newAtom); - + private: + // Used in rare cases when Reference is modified, + // since ivar data is mapped read-only. + void cloneIvarData() { + // TODO: do nothing on second call + NativeReferenceIvarsV1* niv = reinterpret_cast<NativeReferenceIvarsV1*> + (operator new(sizeof(NativeReferenceIvarsV1), + std::nothrow)); + memcpy(niv, _ivarData, sizeof(NativeReferenceIvarsV1)); + } + const NativeFile* _file; const NativeReferenceIvarsV1* _ivarData; }; @@ -785,6 +796,11 @@ inline Reference::Addend NativeReferenceV1::addend() const { return _file->addend(_ivarData->addendIndex); } +inline void NativeReferenceV1::setKind(Kind k) { + this->cloneIvarData(); + const_cast<NativeReferenceIvarsV1*>(_ivarData)->kind = k; +} + inline void NativeReferenceV1::setTarget(const Atom* newAtom) { return _file->setTarget(_ivarData->targetIndex, newAtom); } diff --git a/lld/lib/Core/YamlKeyValues.cpp b/lld/lib/Core/YamlKeyValues.cpp index 7ee46cc07fd..99fb95cc1ba 100644 --- a/lld/lib/Core/YamlKeyValues.cpp +++ b/lld/lib/Core/YamlKeyValues.cpp @@ -150,6 +150,7 @@ static const ContentTypeMapping typeMappings[] = { { "data", DefinedAtom::typeData }, { "zero-fill", DefinedAtom::typeZeroFill }, { "cf-string", DefinedAtom::typeCFString }, + { "got", DefinedAtom::typeGOT }, { "initializer-ptr",DefinedAtom::typeInitializerPtr }, { "terminator-ptr", DefinedAtom::typeTerminatorPtr }, { "c-string-ptr", DefinedAtom::typeCStringPtr }, diff --git a/lld/lib/Core/YamlReader.cpp b/lld/lib/Core/YamlReader.cpp index 64192b0ee3f..b02f381c2cf 100644 --- a/lld/lib/Core/YamlReader.cpp +++ b/lld/lib/Core/YamlReader.cpp @@ -271,6 +271,10 @@ public: return _kind; } + virtual void setKind(Kind k) { + _kind = k; + } + virtual const Atom* target() const { return _target; } diff --git a/lld/lib/Core/YamlWriter.cpp b/lld/lib/Core/YamlWriter.cpp index 2a9e05078ea..bd253b42506 100644 --- a/lld/lib/Core/YamlWriter.cpp +++ b/lld/lib/Core/YamlWriter.cpp @@ -305,6 +305,9 @@ public: for (unsigned int i=0; i < arr.size(); ++i) { if ( needComma ) out << ", "; + if ( ((i % 12) == 0) && (i != 0) ) { + out << "\n "; + } out << hexdigit(arr[i] >> 4); out << hexdigit(arr[i] & 0x0F); needComma = true; |

