1543ede5cb6e970fbdc7940f5017a72956c2558f
[oota-llvm.git] / include / llvm / MC / MCELFObjectWriter.h
1 //===-- llvm/MC/MCELFObjectWriter.h - ELF Object Writer ---------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef LLVM_MC_MCELFOBJECTWRITER_H
11 #define LLVM_MC_MCELFOBJECTWRITER_H
12
13 #include "llvm/MC/MCObjectWriter.h"
14 #include "llvm/Support/DataTypes.h"
15 #include "llvm/Support/ELF.h"
16
17 namespace llvm {
18 class MCELFObjectTargetWriter {
19   const uint8_t OSABI;
20   const uint16_t EMachine;
21   const unsigned HasRelocationAddend : 1;
22   const unsigned Is64Bit : 1;
23
24 protected:
25
26   MCELFObjectTargetWriter(bool Is64Bit_, uint8_t OSABI_,
27                           uint16_t EMachine_,  bool HasRelocationAddend_);
28
29 public:
30   static uint8_t getOSABI(Triple::OSType OSType) {
31     switch (OSType) {
32       case Triple::FreeBSD:
33         return ELF::ELFOSABI_FREEBSD;
34       case Triple::Linux:
35         return ELF::ELFOSABI_LINUX;
36       default:
37         return ELF::ELFOSABI_NONE;
38     }
39   }
40
41   virtual ~MCELFObjectTargetWriter();
42
43   /// @name Accessors
44   /// @{
45   uint8_t getOSABI() { return OSABI; }
46   uint16_t getEMachine() { return EMachine; }
47   bool hasRelocationAddend() { return HasRelocationAddend; }
48   bool is64Bit() const { return Is64Bit; }
49   /// @}
50 };
51
52 /// \brief Construct a new ELF writer instance.
53 ///
54 /// \param MOTW - The target specific ELF writer subclass.
55 /// \param OS - The stream to write to.
56 /// \returns The constructed object writer.
57 MCObjectWriter *createELFObjectWriter(MCELFObjectTargetWriter *MOTW,
58                                       raw_ostream &OS, bool IsLittleEndian);
59 } // End llvm namespace
60
61 #endif