mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-21 21:29:41 +00:00
1. The main works will made in the RuntimeDyLdImpl with uses the ObjectFile class. RuntimeDyLdMachO and RuntimeDyLdELF now only parses relocations and resolve it. This is allows to make improvements of the RuntimeDyLd more easily. In addition the support for COFF can be easily added. 2. Added ARM relocations to RuntimeDyLdELF. 3. Added support for stub functions for the ARM, allowing to do a long branch. 4. Added support for external functions that are not loaded from the object files, but can be loaded from external libraries. Now MCJIT can correctly execute the code containing the printf, putc, and etc. 5. The sections emitted instead functions, thanks Jim Grosbach. MemoryManager.startFunctionBody() and MemoryManager.endFunctionBody() have been removed. 6. MCJITMemoryManager.allocateDataSection() and MCJITMemoryManager. allocateCodeSection() used JMM->allocateSpace() instead of JMM->allocateCodeSection() and JMM->allocateDataSection(), because I got an error: "Cannot allocate an allocated block!" with object file contains more than one code or data sections. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153754 91177308-0d34-0410-b5e6-96231b3b80d8
71 lines
2.5 KiB
C++
71 lines
2.5 KiB
C++
//===-- RuntimeDyldMachO.h - Run-time dynamic linker for MC-JIT ---*- C++ -*-=//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// MachO support for MC-JIT runtime dynamic linker.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_RUNTIME_DYLD_MACHO_H
|
|
#define LLVM_RUNTIME_DYLD_MACHO_H
|
|
|
|
#include "llvm/ADT/IndexedMap.h"
|
|
#include "llvm/Object/MachOObject.h"
|
|
#include "llvm/Support/Format.h"
|
|
#include "RuntimeDyldImpl.h"
|
|
|
|
using namespace llvm;
|
|
using namespace llvm::object;
|
|
|
|
|
|
namespace llvm {
|
|
class RuntimeDyldMachO : public RuntimeDyldImpl {
|
|
protected:
|
|
bool resolveI386Relocation(uint8_t *LocalAddress,
|
|
uint64_t FinalAddress,
|
|
uint64_t Value,
|
|
bool isPCRel,
|
|
unsigned Type,
|
|
unsigned Size,
|
|
int64_t Addend);
|
|
bool resolveX86_64Relocation(uint8_t *LocalAddress,
|
|
uint64_t FinalAddress,
|
|
uint64_t Value,
|
|
bool isPCRel,
|
|
unsigned Type,
|
|
unsigned Size,
|
|
int64_t Addend);
|
|
bool resolveARMRelocation(uint8_t *LocalAddress,
|
|
uint64_t FinalAddress,
|
|
uint64_t Value,
|
|
bool isPCRel,
|
|
unsigned Type,
|
|
unsigned Size,
|
|
int64_t Addend);
|
|
|
|
virtual void processRelocationRef(const ObjRelocationInfo &Rel,
|
|
const ObjectFile &Obj,
|
|
ObjSectionToIDMap &ObjSectionToID,
|
|
LocalSymbolMap &Symbols, StubMap &Stubs);
|
|
|
|
public:
|
|
virtual void resolveRelocation(uint8_t *LocalAddress,
|
|
uint64_t FinalAddress,
|
|
uint64_t Value,
|
|
uint32_t Type,
|
|
int64_t Addend);
|
|
|
|
RuntimeDyldMachO(RTDyldMemoryManager *mm) : RuntimeDyldImpl(mm) {}
|
|
|
|
bool isCompatibleFormat(const MemoryBuffer *InputBuffer) const;
|
|
};
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif
|