ELFObjectFile.cpp revision 234982
1234285Sdim//===- ELFObjectFile.cpp - ELF object file implementation -------*- C++ -*-===// 2234285Sdim// 3234285Sdim// The LLVM Compiler Infrastructure 4234285Sdim// 5234285Sdim// This file is distributed under the University of Illinois Open Source 6234285Sdim// License. See LICENSE.TXT for details. 7234285Sdim// 8234285Sdim//===----------------------------------------------------------------------===// 9234285Sdim// 10249423Sdim// Part of the ELFObjectFile class implementation. 11234285Sdim// 12234285Sdim//===----------------------------------------------------------------------===// 13234285Sdim 14234285Sdim#include "llvm/Object/ELF.h" 15234285Sdim 16234285Sdimnamespace llvm { 17234285Sdim 18249423Sdimusing namespace object; 19249423Sdim 20249423Sdim// Creates an in-memory object-file by default: createELFObjectFile(Buffer) 21234285SdimObjectFile *ObjectFile::createELFObjectFile(MemoryBuffer *Object) { 22234285Sdim std::pair<unsigned char, unsigned char> Ident = getElfArchType(Object); 23234285Sdim error_code ec; 24234285Sdim 25234285Sdim if (Ident.first == ELF::ELFCLASS32 && Ident.second == ELF::ELFDATA2LSB) 26234285Sdim return new ELFObjectFile<support::little, false>(Object, ec); 27234285Sdim else if (Ident.first == ELF::ELFCLASS32 && Ident.second == ELF::ELFDATA2MSB) 28234285Sdim return new ELFObjectFile<support::big, false>(Object, ec); 29234285Sdim else if (Ident.first == ELF::ELFCLASS64 && Ident.second == ELF::ELFDATA2MSB) 30234285Sdim return new ELFObjectFile<support::big, true>(Object, ec); 31234285Sdim else if (Ident.first == ELF::ELFCLASS64 && Ident.second == ELF::ELFDATA2LSB) { 32234285Sdim ELFObjectFile<support::little, true> *result = 33234285Sdim new ELFObjectFile<support::little, true>(Object, ec); 34234285Sdim return result; 35234285Sdim } 36234285Sdim 37234285Sdim report_fatal_error("Buffer is not an ELF object file!"); 38234285Sdim} 39234285Sdim 40234285Sdim} // end namespace llvm 41234285Sdim