diff options
| author | Michael J. Spencer <bigcheesegs@gmail.com> | 2010-11-15 03:21:41 +0000 | 
|---|---|---|
| committer | Michael J. Spencer <bigcheesegs@gmail.com> | 2010-11-15 03:21:41 +0000 | 
| commit | fe5ee802681bdddd52adc47c15b00ee28c93cdf4 (patch) | |
| tree | 3d4d83e06c3a723f88d84143d20bccd169c7c4da /llvm/lib | |
| parent | dd6df84900df4ceb6b4c5bc9c341c14f672ffaf7 (diff) | |
| download | bcm5719-llvm-fe5ee802681bdddd52adc47c15b00ee28c93cdf4.tar.gz bcm5719-llvm-fe5ee802681bdddd52adc47c15b00ee28c93cdf4.zip  | |
Add LLVMObject Library.
llvm-svn: 119107
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Makefile | 2 | ||||
| -rw-r--r-- | llvm/lib/Object/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | llvm/lib/Object/ObjectFile.cpp | 68 | 
3 files changed, 72 insertions, 1 deletions
diff --git a/llvm/lib/Makefile b/llvm/lib/Makefile index 3807f31c703..ed27854f22c 100644 --- a/llvm/lib/Makefile +++ b/llvm/lib/Makefile @@ -11,7 +11,7 @@ LEVEL = ..  include $(LEVEL)/Makefile.config  PARALLEL_DIRS := VMCore AsmParser Bitcode Archive Analysis Transforms CodeGen \ -                Target ExecutionEngine Linker MC CompilerDriver +                Target ExecutionEngine Linker MC CompilerDriver Object  include $(LEVEL)/Makefile.common diff --git a/llvm/lib/Object/CMakeLists.txt b/llvm/lib/Object/CMakeLists.txt new file mode 100644 index 00000000000..18ee4beac18 --- /dev/null +++ b/llvm/lib/Object/CMakeLists.txt @@ -0,0 +1,3 @@ +add_llvm_library(LLVMObject +  ObjectFile.cpp +  ) diff --git a/llvm/lib/Object/ObjectFile.cpp b/llvm/lib/Object/ObjectFile.cpp new file mode 100644 index 00000000000..29aa4b8bdb8 --- /dev/null +++ b/llvm/lib/Object/ObjectFile.cpp @@ -0,0 +1,68 @@ +//===- ObjectFile.cpp - File format independent object file -----*- C++ -*-===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines a file format independent ObjectFile class. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Object/ObjectFile.h" +#include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/MemoryBuffer.h" + +namespace llvm { +namespace object { + +ObjectFile::ObjectFile(MemoryBuffer *Object) +  : MapFile(Object) { +  assert(MapFile && "Must be a valid MemoryBuffer!"); +  base = reinterpret_cast<const uint8_t *>(MapFile->getBufferStart()); +} + +ObjectFile::~ObjectFile() { +  delete MapFile; +} + +StringRef ObjectFile::getFilename() const { +  return MapFile->getBufferIdentifier(); +} + +ObjectFile *ObjectFile::createObjectFile(MemoryBuffer *Object) { +  if (!Object || Object->getBufferSize() < 64) +    return 0; +  sys::LLVMFileType type = sys::IdentifyFileType(Object->getBufferStart(), +                                static_cast<unsigned>(Object->getBufferSize())); +  switch (type) { +    case sys::ELF_Relocatable_FileType: +    case sys::ELF_Executable_FileType: +    case sys::ELF_SharedObject_FileType: +    case sys::ELF_Core_FileType: +        return 0; +    case sys::Mach_O_Object_FileType: +    case sys::Mach_O_Executable_FileType: +    case sys::Mach_O_FixedVirtualMemorySharedLib_FileType: +    case sys::Mach_O_Core_FileType: +    case sys::Mach_O_PreloadExectuable_FileType: +    case sys::Mach_O_DynamicallyLinkedSharedLib_FileType: +    case sys::Mach_O_DynamicLinker_FileType: +    case sys::Mach_O_Bundle_FileType: +    case sys::Mach_O_DynamicallyLinkedSharedLibStub_FileType: +      return 0; +    case sys::COFF_FileType: +      return 0; +    default: +      llvm_unreachable("Unknown Object File Type"); +  } +} + +ObjectFile *ObjectFile::createObjectFile(const sys::Path &ObjectPath) { +  return createObjectFile(MemoryBuffer::getFile(ObjectPath.c_str())); +} + +} // end namespace object +} // end namespace llvm  | 

