mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
Revert r196639 while I investigate a bot failure.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196641 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -20,10 +20,6 @@
|
||||
|
||||
namespace llvm {
|
||||
|
||||
namespace object {
|
||||
class ObjectFile;
|
||||
}
|
||||
|
||||
class ObjectImageCommon : public ObjectImage {
|
||||
ObjectImageCommon(); // = delete
|
||||
ObjectImageCommon(const ObjectImageCommon &other); // = delete
|
||||
@@ -46,8 +42,6 @@ public:
|
||||
{
|
||||
ObjFile = object::ObjectFile::createObjectFile(Buffer->getMemBuffer());
|
||||
}
|
||||
ObjectImageCommon(object::ObjectFile* Input)
|
||||
: ObjectImage(NULL), ObjFile(Input) {}
|
||||
virtual ~ObjectImageCommon() { delete ObjFile; }
|
||||
|
||||
virtual object::symbol_iterator begin_symbols() const
|
||||
|
@@ -82,24 +82,12 @@ ObjectImage *RuntimeDyldImpl::createObjectImage(ObjectBuffer *InputBuffer) {
|
||||
return new ObjectImageCommon(InputBuffer);
|
||||
}
|
||||
|
||||
ObjectImage *RuntimeDyldImpl::createObjectImageFromFile(ObjectFile *InputObject) {
|
||||
return new ObjectImageCommon(InputObject);
|
||||
}
|
||||
|
||||
ObjectImage *RuntimeDyldImpl::loadObject(ObjectFile *InputObject) {
|
||||
return loadObject(createObjectImageFromFile(InputObject));
|
||||
}
|
||||
|
||||
ObjectImage *RuntimeDyldImpl::loadObject(ObjectBuffer *InputBuffer) {
|
||||
return loadObject(createObjectImage(InputBuffer));
|
||||
}
|
||||
|
||||
ObjectImage *RuntimeDyldImpl::loadObject(ObjectImage *InputObject) {
|
||||
MutexGuard locked(lock);
|
||||
|
||||
OwningPtr<ObjectImage> obj(InputObject);
|
||||
OwningPtr<ObjectImage> obj(createObjectImage(InputBuffer));
|
||||
if (!obj)
|
||||
return NULL;
|
||||
report_fatal_error("Unable to create object image from memory buffer!");
|
||||
|
||||
// Save information about our target
|
||||
Arch = (Triple::ArchType)obj->getArch();
|
||||
@@ -151,7 +139,7 @@ ObjectImage *RuntimeDyldImpl::loadObject(ObjectImage *InputObject) {
|
||||
if (si == obj->end_sections()) continue;
|
||||
Check(si->getContents(SectionData));
|
||||
Check(si->isText(IsCode));
|
||||
const uint8_t* SymPtr = (const uint8_t*)InputObject->getData().data() +
|
||||
const uint8_t* SymPtr = (const uint8_t*)InputBuffer->getBufferStart() +
|
||||
(uintptr_t)FileOffset;
|
||||
uintptr_t SectOffset = (uintptr_t)(SymPtr -
|
||||
(const uint8_t*)SectionData.begin());
|
||||
@@ -575,22 +563,6 @@ RuntimeDyld::~RuntimeDyld() {
|
||||
delete Dyld;
|
||||
}
|
||||
|
||||
ObjectImage *RuntimeDyld::loadObject(ObjectFile *InputObject) {
|
||||
if (!Dyld) {
|
||||
if (InputObject->isELF())
|
||||
Dyld = new RuntimeDyldELF(MM);
|
||||
else if (InputObject->isMachO())
|
||||
Dyld = new RuntimeDyldMachO(MM);
|
||||
else
|
||||
report_fatal_error("Incompatible object format!");
|
||||
} else {
|
||||
if (!Dyld->isCompatibleFile(InputObject))
|
||||
report_fatal_error("Incompatible object format!");
|
||||
}
|
||||
|
||||
return Dyld->loadObject(InputObject);
|
||||
}
|
||||
|
||||
ObjectImage *RuntimeDyld::loadObject(ObjectBuffer *InputBuffer) {
|
||||
if (!Dyld) {
|
||||
sys::fs::file_magic Type =
|
||||
|
@@ -25,8 +25,6 @@
|
||||
#include "llvm/Object/ELFObjectFile.h"
|
||||
#include "llvm/Object/ObjectFile.h"
|
||||
#include "llvm/Support/ELF.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
|
||||
using namespace llvm;
|
||||
using namespace llvm::object;
|
||||
|
||||
@@ -180,39 +178,6 @@ void RuntimeDyldELF::deregisterEHFrames() {
|
||||
RegisteredEHFrameSections.clear();
|
||||
}
|
||||
|
||||
ObjectImage *RuntimeDyldELF::createObjectImageFromFile(object::ObjectFile *ObjFile) {
|
||||
if (!ObjFile)
|
||||
return NULL;
|
||||
|
||||
error_code ec;
|
||||
MemoryBuffer* Buffer = MemoryBuffer::getMemBuffer(ObjFile->getData(),
|
||||
"",
|
||||
false);
|
||||
|
||||
if (ObjFile->getBytesInAddress() == 4 && ObjFile->isLittleEndian()) {
|
||||
DyldELFObject<ELFType<support::little, 4, false> > *Obj =
|
||||
new DyldELFObject<ELFType<support::little, 4, false> >(Buffer, ec);
|
||||
return new ELFObjectImage<ELFType<support::little, 4, false> >(NULL, Obj);
|
||||
}
|
||||
else if (ObjFile->getBytesInAddress() == 4 && !ObjFile->isLittleEndian()) {
|
||||
DyldELFObject<ELFType<support::big, 4, false> > *Obj =
|
||||
new DyldELFObject<ELFType<support::big, 4, false> >(Buffer, ec);
|
||||
return new ELFObjectImage<ELFType<support::big, 4, false> >(NULL, Obj);
|
||||
}
|
||||
else if (ObjFile->getBytesInAddress() == 8 && !ObjFile->isLittleEndian()) {
|
||||
DyldELFObject<ELFType<support::big, 8, true> > *Obj =
|
||||
new DyldELFObject<ELFType<support::big, 8, true> >(Buffer, ec);
|
||||
return new ELFObjectImage<ELFType<support::big, 8, true> >(NULL, Obj);
|
||||
}
|
||||
else if (ObjFile->getBytesInAddress() == 8 && ObjFile->isLittleEndian()) {
|
||||
DyldELFObject<ELFType<support::little, 8, true> > *Obj =
|
||||
new DyldELFObject<ELFType<support::little, 8, true> >(Buffer, ec);
|
||||
return new ELFObjectImage<ELFType<support::little, 8, true> >(NULL, Obj);
|
||||
}
|
||||
else
|
||||
llvm_unreachable("Unexpected ELF format");
|
||||
}
|
||||
|
||||
ObjectImage *RuntimeDyldELF::createObjectImage(ObjectBuffer *Buffer) {
|
||||
if (Buffer->getBufferSize() < ELF::EI_NIDENT)
|
||||
llvm_unreachable("Unexpected ELF object size");
|
||||
@@ -1438,9 +1403,4 @@ bool RuntimeDyldELF::isCompatibleFormat(const ObjectBuffer *Buffer) const {
|
||||
return false;
|
||||
return (memcmp(Buffer->getBufferStart(), ELF::ElfMagic, strlen(ELF::ElfMagic))) == 0;
|
||||
}
|
||||
|
||||
bool RuntimeDyldELF::isCompatibleFile(const object::ObjectFile *Obj) const {
|
||||
return Obj->isELF();
|
||||
}
|
||||
|
||||
} // namespace llvm
|
||||
|
@@ -140,9 +140,7 @@ public:
|
||||
const SymbolTableMap &Symbols,
|
||||
StubMap &Stubs);
|
||||
virtual bool isCompatibleFormat(const ObjectBuffer *Buffer) const;
|
||||
virtual bool isCompatibleFile(const object::ObjectFile *Buffer) const;
|
||||
virtual ObjectImage *createObjectImage(ObjectBuffer *InputBuffer);
|
||||
virtual ObjectImage *createObjectImageFromFile(object::ObjectFile *Obj);
|
||||
virtual void registerEHFrames();
|
||||
virtual void deregisterEHFrames();
|
||||
virtual void finalizeLoad(ObjSectionToIDMap &SectionMap);
|
||||
|
@@ -311,18 +311,12 @@ protected:
|
||||
virtual void updateGOTEntries(StringRef Name, uint64_t Addr) {}
|
||||
|
||||
virtual ObjectImage *createObjectImage(ObjectBuffer *InputBuffer);
|
||||
virtual ObjectImage *createObjectImageFromFile(object::ObjectFile *InputObject);
|
||||
|
||||
// This is the implementation for the two public overloads
|
||||
ObjectImage *loadObject(ObjectImage *InputObject);
|
||||
|
||||
public:
|
||||
RuntimeDyldImpl(RTDyldMemoryManager *mm) : MemMgr(mm), HasError(false) {}
|
||||
|
||||
virtual ~RuntimeDyldImpl();
|
||||
|
||||
ObjectImage *loadObject(ObjectBuffer *InputBuffer);
|
||||
ObjectImage *loadObject(object::ObjectFile *InputObject);
|
||||
|
||||
void *getSymbolAddress(StringRef Name) {
|
||||
// FIXME: Just look up as a function for now. Overly simple of course.
|
||||
@@ -360,7 +354,6 @@ public:
|
||||
StringRef getErrorString() { return ErrorStr; }
|
||||
|
||||
virtual bool isCompatibleFormat(const ObjectBuffer *Buffer) const = 0;
|
||||
virtual bool isCompatibleFile(const ObjectFile *Obj) const = 0;
|
||||
|
||||
virtual void registerEHFrames();
|
||||
|
||||
|
@@ -455,9 +455,4 @@ bool RuntimeDyldMachO::isCompatibleFormat(
|
||||
return false;
|
||||
}
|
||||
|
||||
bool RuntimeDyldMachO::isCompatibleFile(
|
||||
const object::ObjectFile *Obj) const {
|
||||
return Obj->isMachO();
|
||||
}
|
||||
|
||||
} // end namespace llvm
|
||||
|
@@ -94,7 +94,6 @@ public:
|
||||
const SymbolTableMap &Symbols,
|
||||
StubMap &Stubs);
|
||||
virtual bool isCompatibleFormat(const ObjectBuffer *Buffer) const;
|
||||
virtual bool isCompatibleFile(const object::ObjectFile *Obj) const;
|
||||
virtual void registerEHFrames();
|
||||
virtual void finalizeLoad(ObjSectionToIDMap &SectionMap);
|
||||
};
|
||||
|
Reference in New Issue
Block a user