From 62661c935d1f299e8f9daeebd5559cd1c2d84712 Mon Sep 17 00:00:00 2001 From: Sasa Stankovic Date: Wed, 3 Sep 2014 09:44:11 -0700 Subject: [PATCH] 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. --- gold/ChangeLog | 14 +++++++++++ gold/mips.cc | 68 ++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 75 insertions(+), 7 deletions(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index 2c09a05efcf..86decfb1d32 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,17 @@ +2014-09-03 Sasa Stankovic + + * 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. + 2014-09-02 Cary Coutant * dwp.cc (Sized_relobj_dwo::do_section_name): Add const attribute. diff --git a/gold/mips.cc b/gold/mips.cc index 450883efdfa..92e1201125f 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 // 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* got_; // gp symbol. It has the value of .got + 0x7FF0. @@ -10462,7 +10463,7 @@ Target_mips::elf_mips_mach_name(elfcpp::Elf_Word e_flags) } template -Target::Target_info Target_mips::mips_info = +const Target::Target_info Target_mips::mips_info = { size, // size big_endian, // is_big_endian @@ -10488,7 +10489,47 @@ Target::Target_info Target_mips::mips_info = "__start" // entry_symbol_name }; -// The selector for mips object files. +template +class Target_mips_nacl : public Target_mips +{ + public: + Target_mips_nacl() + : Target_mips(&mips_nacl_info) + { } + + private: + static const Target::Target_info mips_nacl_info; +}; + +template +const Target::Target_info Target_mips_nacl::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 class Target_selector_mips : public Target_selector @@ -10508,10 +10549,23 @@ public: { return new Target_mips(); } }; -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 +class Target_selector_mips_nacl + : public Target_selector_nacl, + Target_mips_nacl > +{ + public: + Target_selector_mips_nacl() + : Target_selector_nacl, + Target_mips_nacl >( + // 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. -- 2.30.2