Binary.cpp revision c44c915372ee453bd63a8b6b3eca586ab6f18545
1c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer//===- Binary.cpp - A generic binary file -----------------------*- C++ -*-===// 2c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer// 3c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer// The LLVM Compiler Infrastructure 4c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer// 5c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer// This file is distributed under the University of Illinois Open Source 6c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer// License. See LICENSE.TXT for details. 7c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer// 8c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer//===----------------------------------------------------------------------===// 9c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer// 10c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer// This file defines the Binary class. 11c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer// 12c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer//===----------------------------------------------------------------------===// 13c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer 14c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer#include "llvm/Object/Binary.h" 15c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer#include "llvm/ADT/StringRef.h" 16c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer#include "llvm/Support/MemoryBuffer.h" 17c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer#include "llvm/Support/Path.h" 18c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer 19c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencerusing namespace llvm; 20c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencerusing namespace object; 21c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer 22c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. SpencerBinary::~Binary() { 23c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer delete Data; 24c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer} 25c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer 26c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. SpencerBinary::Binary(unsigned int Type, MemoryBuffer *Source) 27c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer : TypeID(Type) 28c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer , Data(Source) {} 29c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer 30c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. SpencerStringRef Binary::getData() const { 31c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer return Data->getBuffer(); 32c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer} 33c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer 34c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. SpencerStringRef Binary::getFileName() const { 35c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer return Data->getBufferIdentifier(); 36c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer} 37c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer 38c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencererror_code object::createBinary(MemoryBuffer *Source, 39c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer OwningPtr<Binary> &Result) { 40c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer // We don't support any at the moment. 41c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer delete Source; 42c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer return object_error::invalid_file_type; 43c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer} 44c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer 45c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencererror_code object::createBinary(StringRef Path, OwningPtr<Binary> &Result) { 46c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer OwningPtr<MemoryBuffer> File; 47c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer if (error_code ec = MemoryBuffer::getFile(Path, File)) 48c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer return ec; 49c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer return createBinary(File.take(), Result); 50c44c915372ee453bd63a8b6b3eca586ab6f18545Michael J. Spencer} 51