mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-19 04:32:19 +00:00
MC/Mach-O: Start stubbing out a Mach-O object file wrapper.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120190 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7976b88d9f
commit
fbd25b7d1d
69
include/llvm/Object/MachOObject.h
Normal file
69
include/llvm/Object/MachOObject.h
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
//===- MachOObject.h - Mach-O Object File Wrapper ---------------*- C++ -*-===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is distributed under the University of Illinois Open Source
|
||||||
|
// License. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#ifndef LLVM_OBJECT_MACHOOBJECT_H
|
||||||
|
#define LLVM_OBJECT_MACHOOBJECT_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include "llvm/ADT/OwningPtr.h"
|
||||||
|
|
||||||
|
namespace llvm {
|
||||||
|
|
||||||
|
class MemoryBuffer;
|
||||||
|
|
||||||
|
namespace object {
|
||||||
|
|
||||||
|
/// \brief Wrapper object for manipulating Mach-O object files.
|
||||||
|
///
|
||||||
|
/// This class is designed to implement a full-featured, efficient, portable,
|
||||||
|
/// and robust Mach-O interface to Mach-O object files. It does not attempt to
|
||||||
|
/// smooth over rough edges in the Mach-O format or generalize access to object
|
||||||
|
/// independent features.
|
||||||
|
///
|
||||||
|
/// The class is designed around accessing the Mach-O object which is expected
|
||||||
|
/// to be fully loaded into memory.
|
||||||
|
///
|
||||||
|
/// This class is *not* suitable for concurrent use. For efficient operation,
|
||||||
|
/// the class uses APIs which rely on the ability to cache the results of
|
||||||
|
/// certain calls in internal objects which are not safe for concurrent
|
||||||
|
/// access. This allows the API to be zero-copy on the common paths.
|
||||||
|
//
|
||||||
|
// FIXME: It would be cool if we supported a "paged" MemoryBuffer
|
||||||
|
// implementation. This would allow us to implement a more sensible version of
|
||||||
|
// MemoryObject which can work like a MemoryBuffer, but be more efficient for
|
||||||
|
// objects which are in the current address space.
|
||||||
|
class MachOObject {
|
||||||
|
public:
|
||||||
|
|
||||||
|
private:
|
||||||
|
OwningPtr<MemoryBuffer> Buffer;
|
||||||
|
|
||||||
|
public:
|
||||||
|
MachOObject(MemoryBuffer *Buffer);
|
||||||
|
|
||||||
|
/// \brief Load a Mach-O object from a MemoryBuffer object.
|
||||||
|
///
|
||||||
|
/// \param Buffer - The buffer to load the object from. This routine takes
|
||||||
|
/// exclusive ownership of the buffer (which is passed to the returned object
|
||||||
|
/// on success).
|
||||||
|
/// \param ErrorStr [out] - If given, will be set to a user readable error
|
||||||
|
/// message on failure.
|
||||||
|
/// \returns The loaded object, or null on error.
|
||||||
|
static MachOObject *LoadFromBuffer(MemoryBuffer *Buffer,
|
||||||
|
std::string *ErrorStr = 0);
|
||||||
|
|
||||||
|
/// @name Object Header Information
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // end namespace object
|
||||||
|
} // end namespace llvm
|
||||||
|
|
||||||
|
#endif
|
@ -1,3 +1,4 @@
|
|||||||
add_llvm_library(LLVMObject
|
add_llvm_library(LLVMObject
|
||||||
|
MachOObject.cpp
|
||||||
ObjectFile.cpp
|
ObjectFile.cpp
|
||||||
)
|
)
|
||||||
|
23
lib/Object/MachOObject.cpp
Normal file
23
lib/Object/MachOObject.cpp
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
//===- MachOObject.cpp - Mach-O Object File Wrapper -----------------------===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is distributed under the University of Illinois Open Source
|
||||||
|
// License. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#include "llvm/Object/MachOObject.h"
|
||||||
|
#include "llvm/Support/MemoryBuffer.h"
|
||||||
|
|
||||||
|
using namespace llvm;
|
||||||
|
using namespace object;
|
||||||
|
|
||||||
|
MachOObject::MachOObject(MemoryBuffer *Buffer_) : Buffer(Buffer_) {
|
||||||
|
}
|
||||||
|
|
||||||
|
MachOObject *MachOObject::LoadFromBuffer(MemoryBuffer *Buffer,
|
||||||
|
std::string *ErrorStr) {
|
||||||
|
if (ErrorStr) *ErrorStr = "";
|
||||||
|
return new MachOObject(Buffer);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user