mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-11 21:45:16 +00:00
MC/Mach-O: Start stubbing out a Mach-O object file wrapper.
llvm-svn: 120190
This commit is contained in:
parent
9b9f0a4d16
commit
52f1774650
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
|
||||
MachOObject.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…
Reference in New Issue
Block a user