Home | History | Annotate | Download | only in Mips
      1 //===- MipsGNUInfo.h ------------------------------------------------------===//
      2 //
      3 //                     The MCLinker Project
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 #ifndef MCLD_TARGET_MIPS_GNU_INFO_H
     10 #define MCLD_TARGET_MIPS_GNU_INFO_H
     11 #include <mcld/Target/GNUInfo.h>
     12 
     13 #include <llvm/Support/ELF.h>
     14 
     15 namespace mcld {
     16 
     17 class MipsGNUInfo : public GNUInfo
     18 {
     19 public:
     20   enum {
     21     // The original o32 abi.
     22     E_MIPS_ABI_O32    = 0x00001000,
     23     // O32 extended to work on 64 bit architectures.
     24     E_MIPS_ABI_O64    = 0x00002000,
     25     // EABI in 32 bit mode.
     26     E_MIPS_ABI_EABI32 = 0x00003000,
     27     // EABI in 64 bit mode.
     28     E_MIPS_ABI_EABI64 = 0x00004000
     29   };
     30 
     31 public:
     32   MipsGNUInfo(const llvm::Triple& pTriple) : GNUInfo(pTriple) { }
     33 
     34   uint32_t machine() const { return llvm::ELF::EM_MIPS; }
     35 
     36   uint64_t defaultTextSegmentAddr() const { return 0x80000; }
     37 
     38   uint64_t flags() const
     39   {
     40     // TODO: (simon) The correct flag's set depend on command line
     41     // arguments and flags from input .o files.
     42     return llvm::ELF::EF_MIPS_ARCH_32R2 |
     43            llvm::ELF::EF_MIPS_NOREORDER |
     44            llvm::ELF::EF_MIPS_PIC |
     45            llvm::ELF::EF_MIPS_CPIC |
     46            E_MIPS_ABI_O32;
     47   }
     48 
     49   uint64_t abiPageSize() const { return 0x10000; }
     50 };
     51 
     52 } // namespace of mcld
     53 
     54 #endif
     55 
     56