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