1f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===- MipsGNUInfo.cpp ----------------------------------------------------===//
2f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//
3f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//                     The MCLinker Project
4f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//
5f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// This file is distributed under the University of Illinois Open Source
6f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// License. See LICENSE.TXT for details.
7f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//
8f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===//
9f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines#include "MipsGNUInfo.h"
10f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
11f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesnamespace mcld {
12f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
13f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===//
14f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// MipsGNUInfo
15f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===//
16f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen HinesMipsGNUInfo::MipsGNUInfo(const llvm::Triple& pTriple)
17cfcb22478ca64c308df58f9abe6fa2dedb213c16Stephen Hines    : GNUInfo(pTriple), m_ABIVersion(0), m_ElfFlags(0) {
1837b74a387bb3993387029859c2d9d051c41c724eStephen Hines}
19f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
2037b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid MipsGNUInfo::setABIVersion(uint8_t ver) {
21f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  m_ABIVersion = ver;
22f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
23f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
24cfcb22478ca64c308df58f9abe6fa2dedb213c16Stephen Hinesvoid MipsGNUInfo::setElfFlags(uint64_t flags) {
25cfcb22478ca64c308df58f9abe6fa2dedb213c16Stephen Hines  m_ElfFlags = flags;
26f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
27f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
2837b74a387bb3993387029859c2d9d051c41c724eStephen Hinesuint32_t MipsGNUInfo::machine() const {
29f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  return llvm::ELF::EM_MIPS;
30f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
31f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
3237b74a387bb3993387029859c2d9d051c41c724eStephen Hinesuint8_t MipsGNUInfo::ABIVersion() const {
33f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  return m_ABIVersion;
34f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
35f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
3637b74a387bb3993387029859c2d9d051c41c724eStephen Hinesuint64_t MipsGNUInfo::defaultTextSegmentAddr() const {
37f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  if (m_Triple.isArch32Bit())
38f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines    return 0x400000;
39f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  else
40f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines    return 0x120000000ull;
41f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
42f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
4337b74a387bb3993387029859c2d9d051c41c724eStephen Hinesuint64_t MipsGNUInfo::flags() const {
44cfcb22478ca64c308df58f9abe6fa2dedb213c16Stephen Hines  return m_ElfFlags;
45f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
46f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
4737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesconst char* MipsGNUInfo::entry() const {
48f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  return "__start";
49f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
50f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
5137b74a387bb3993387029859c2d9d051c41c724eStephen Hinesconst char* MipsGNUInfo::dyld() const {
52f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  return m_Triple.isArch32Bit() ? "/lib/ld.so.1" : "/lib64/ld.so.1";
53f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
54f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
5537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesuint64_t MipsGNUInfo::abiPageSize() const {
56f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  return 0x10000;
57f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
58f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
5937b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
60