//===- MipsGNUInfo.h ------------------------------------------------------===//
//
//                     The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef MCLD_TARGET_MIPS_GNU_INFO_H
#define MCLD_TARGET_MIPS_GNU_INFO_H
#include <mcld/Target/GNUInfo.h>

#include <llvm/Support/ELF.h>

namespace mcld {

class MipsGNUInfo : public GNUInfo
{
public:
  enum {
    // The original o32 abi.
    E_MIPS_ABI_O32    = 0x00001000,
    // O32 extended to work on 64 bit architectures.
    E_MIPS_ABI_O64    = 0x00002000,
    // EABI in 32 bit mode.
    E_MIPS_ABI_EABI32 = 0x00003000,
    // EABI in 64 bit mode.
    E_MIPS_ABI_EABI64 = 0x00004000
  };

public:
  MipsGNUInfo(const llvm::Triple& pTriple) : GNUInfo(pTriple) { }

  uint32_t machine() const { return llvm::ELF::EM_MIPS; }

  uint64_t defaultTextSegmentAddr() const { return 0x80000; }

  uint64_t flags() const
  {
    // TODO: (simon) The correct flag's set depend on command line
    // arguments and flags from input .o files.
    return llvm::ELF::EF_MIPS_ARCH_32R2 |
           llvm::ELF::EF_MIPS_NOREORDER |
           llvm::ELF::EF_MIPS_PIC |
           llvm::ELF::EF_MIPS_CPIC |
           E_MIPS_ABI_O32;
  }

  uint64_t abiPageSize() const { return 0x10000; }
};

} // namespace of mcld

#endif

