aboutsummaryrefslogtreecommitdiff
path: root/gold/mips.cc
diff options
context:
space:
mode:
authorSasa Stankovic <Sasa.Stankovic@imgtec.com>2014-09-03 09:44:11 -0700
committerCary Coutant <ccoutant@google.com>2014-09-03 09:44:11 -0700
commit62661c935d1f299e8f9daeebd5559cd1c2d84712 (patch)
tree11094df934ce8be3f5d56649b399b7367ba09a09 /gold/mips.cc
parentdf7b4545b2b49572ab63690c130df973af109615 (diff)
downloadgdb-62661c935d1f299e8f9daeebd5559cd1c2d84712.zip
gdb-62661c935d1f299e8f9daeebd5559cd1c2d84712.tar.gz
gdb-62661c935d1f299e8f9daeebd5559cd1c2d84712.tar.bz2
Add NaCl (NativeClient) specific classes Target_mips_nacl and
Target_selector_mips_nacl. gold/ * mips.cc (Target_mips_nacl): New class. (Target_selector_mips_nacl): New class. (target_selector_mips32): Rename from target_selector_mips32be and use Target_selector_mips_nacl instead of Target_selector_mips. (target_selector_mips32el): Rename from target_selector_mips32 and use Target_selector_mips_nacl instead of Target_selector_mips. (target_selector_mips64): Rename from target_selector_mips64be and use Target_selector_mips_nacl instead of Target_selector_mips. (target_selector_mips64el): Rename from target_selector_mips64 and use Target_selector_mips_nacl instead of Target_selector_mips. (Target_mips::mips_info): Add const attribute.
Diffstat (limited to 'gold/mips.cc')
-rw-r--r--gold/mips.cc68
1 files changed, 61 insertions, 7 deletions
diff --git a/gold/mips.cc b/gold/mips.cc
index 450883e..92e1201 100644
--- a/gold/mips.cc
+++ b/gold/mips.cc
@@ -44,6 +44,7 @@
#include "tls.h"
#include "errors.h"
#include "gc.h"
+#include "nacl.h"
namespace
{
@@ -3711,7 +3712,7 @@ class Target_mips : public Sized_target<size, big_endian>
// Information about this specific target which we pass to the
// general Target structure.
- static Target::Target_info mips_info;
+ static const Target::Target_info mips_info;
// The GOT section.
Mips_output_data_got<size, big_endian>* got_;
// gp symbol. It has the value of .got + 0x7FF0.
@@ -10462,7 +10463,7 @@ Target_mips<size, big_endian>::elf_mips_mach_name(elfcpp::Elf_Word e_flags)
}
template<int size, bool big_endian>
-Target::Target_info Target_mips<size, big_endian>::mips_info =
+const Target::Target_info Target_mips<size, big_endian>::mips_info =
{
size, // size
big_endian, // is_big_endian
@@ -10488,7 +10489,47 @@ Target::Target_info Target_mips<size, big_endian>::mips_info =
"__start" // entry_symbol_name
};
-// The selector for mips object files.
+template<int size, bool big_endian>
+class Target_mips_nacl : public Target_mips<size, big_endian>
+{
+ public:
+ Target_mips_nacl()
+ : Target_mips<size, big_endian>(&mips_nacl_info)
+ { }
+
+ private:
+ static const Target::Target_info mips_nacl_info;
+};
+
+template<int size, bool big_endian>
+const Target::Target_info Target_mips_nacl<size, big_endian>::mips_nacl_info =
+{
+ size, // size
+ big_endian, // is_big_endian
+ elfcpp::EM_MIPS, // machine_code
+ true, // has_make_symbol
+ false, // has_resolve
+ false, // has_code_fill
+ true, // is_default_stack_executable
+ false, // can_icf_inline_merge_sections
+ '\0', // wrap_char
+ "/lib/ld.so.1", // dynamic_linker
+ 0x20000, // default_text_segment_address
+ 0x10000, // abi_pagesize (overridable by -z max-page-size)
+ 0x10000, // common_pagesize (overridable by -z common-page-size)
+ true, // isolate_execinstr
+ 0x10000000, // rosegment_gap
+ elfcpp::SHN_UNDEF, // small_common_shndx
+ elfcpp::SHN_UNDEF, // large_common_shndx
+ 0, // small_common_section_flags
+ 0, // large_common_section_flags
+ NULL, // attributes_section
+ NULL, // attributes_vendor
+ "_start" // entry_symbol_name
+};
+
+// Target selector for Mips. Note this is never instantiated directly.
+// It's only used in Target_selector_mips_nacl, below.
template<int size, bool big_endian>
class Target_selector_mips : public Target_selector
@@ -10508,10 +10549,23 @@ public:
{ return new Target_mips<size, big_endian>(); }
};
-Target_selector_mips<32, true> target_selector_mips32be;
-Target_selector_mips<32, false> target_selector_mips32;
-Target_selector_mips<64, true> target_selector_mips64be;
-Target_selector_mips<64, false> target_selector_mips64;
+template<int size, bool big_endian>
+class Target_selector_mips_nacl
+ : public Target_selector_nacl<Target_selector_mips<size, big_endian>,
+ Target_mips_nacl<size, big_endian> >
+{
+ public:
+ Target_selector_mips_nacl()
+ : Target_selector_nacl<Target_selector_mips<size, big_endian>,
+ Target_mips_nacl<size, big_endian> >(
+ // NaCl currently supports only MIPS32 little-endian.
+ "mipsel", "elf32-tradlittlemips-nacl", "elf32-tradlittlemips-nacl")
+ { }
+};
+Target_selector_mips_nacl<32, true> target_selector_mips32;
+Target_selector_mips_nacl<32, false> target_selector_mips32el;
+Target_selector_mips_nacl<64, true> target_selector_mips64;
+Target_selector_mips_nacl<64, false> target_selector_mips64el;
} // End anonymous namespace.