--- src/ld/MachOReaderRelocatable.hpp.orig 2015-01-24 01:24:52.000000000 -0800 +++ src/ld/MachOReaderRelocatable.hpp 2015-01-24 01:40:57.000000000 -0800 @@ -62,7 +62,38 @@ extern void warning(const char* format, namespace mach_o { namespace relocatable { +class BaseAtom : public ObjectFile::Atom +{ +public: + BaseAtom() : fStabsStartIndex(0), fStabsCount(0), fHasCompactUnwindInfo(false) {} + virtual void setSize(uint64_t size) = 0; + virtual void addReference(ObjectFile::Reference* ref) = 0; + virtual void sortReferences() = 0; + virtual void addLineInfo(const ObjectFile::LineInfo& info) = 0; + virtual const ObjectFile::ReaderOptions& getOptions() const = 0; + virtual uint64_t getObjectAddress() const = 0; + virtual uint32_t getOrdinal() const { return fOrdinal; } + virtual void setOrdinal(uint32_t value) { fOrdinal = value; } + virtual const void* getSectionRecord() const = 0; + virtual unsigned int getSectionIndex() const = 0; + virtual bool isAlias() const { return false; } + virtual uint8_t getLSDAReferenceKind() const { return 0; } + virtual uint8_t getPersonalityReferenceKind() const { return 0; } + virtual uint32_t getCompactUnwindEncoding(uint64_t ehAtomAddress) { return 0; } + virtual ObjectFile::UnwindInfo::iterator beginUnwind() { return fHasCompactUnwindInfo ? &fSingleUnwindInfo[0] : NULL; } + virtual ObjectFile::UnwindInfo::iterator endUnwind() { return fHasCompactUnwindInfo ? &fSingleUnwindInfo[1] : NULL; } + virtual ObjectFile::Reference* getLSDA(); + virtual ObjectFile::Reference* getFDE(); + virtual Atom* getPersonalityPointer(); + virtual void setCompactUnwindEncoding(uint64_t ehAtomAddress); + + uint32_t fStabsStartIndex; + uint32_t fStabsCount; + uint32_t fOrdinal; + ObjectFile::UnwindInfo fSingleUnwindInfo[1]; + bool fHasCompactUnwindInfo; +}; class ReferenceSorter { @@ -274,40 +305,6 @@ public: LinkEditSegment LinkEditSegment::fgSingleton; -class BaseAtom : public ObjectFile::Atom -{ -public: - BaseAtom() : fStabsStartIndex(0), fStabsCount(0), fHasCompactUnwindInfo(false) {} - - virtual void setSize(uint64_t size) = 0; - virtual void addReference(ObjectFile::Reference* ref) = 0; - virtual void sortReferences() = 0; - virtual void addLineInfo(const ObjectFile::LineInfo& info) = 0; - virtual const ObjectFile::ReaderOptions& getOptions() const = 0; - virtual uint64_t getObjectAddress() const = 0; - virtual uint32_t getOrdinal() const { return fOrdinal; } - virtual void setOrdinal(uint32_t value) { fOrdinal = value; } - virtual const void* getSectionRecord() const = 0; - virtual unsigned int getSectionIndex() const = 0; - virtual bool isAlias() const { return false; } - virtual uint8_t getLSDAReferenceKind() const { return 0; } - virtual uint8_t getPersonalityReferenceKind() const { return 0; } - virtual uint32_t getCompactUnwindEncoding(uint64_t ehAtomAddress) { return 0; } - virtual ObjectFile::UnwindInfo::iterator beginUnwind() { return fHasCompactUnwindInfo ? &fSingleUnwindInfo[0] : NULL; } - virtual ObjectFile::UnwindInfo::iterator endUnwind() { return fHasCompactUnwindInfo ? &fSingleUnwindInfo[1] : NULL; } - virtual ObjectFile::Reference* getLSDA(); - virtual ObjectFile::Reference* getFDE(); - virtual Atom* getPersonalityPointer(); - virtual void setCompactUnwindEncoding(uint64_t ehAtomAddress); - - uint32_t fStabsStartIndex; - uint32_t fStabsCount; - uint32_t fOrdinal; - ObjectFile::UnwindInfo fSingleUnwindInfo[1]; - bool fHasCompactUnwindInfo; -}; - - ObjectFile::Reference* BaseAtom::getLSDA() { const uint8_t groupKind = this->getLSDAReferenceKind();