aboutsummaryrefslogtreecommitdiff
path: root/gold/i386.cc
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2015-10-13 09:02:23 -0700
committerH.J. Lu <hjl.tools@gmail.com>2015-10-13 09:02:41 -0700
commit01f573ad8aa539f972e2fef8a10ef290e042e24c (patch)
tree26bbca594b8ac6ea3ff383282880f927d6264584 /gold/i386.cc
parent8f33e7daaf80d23fc0f0551a14f9cffb95a85141 (diff)
downloadbinutils-01f573ad8aa539f972e2fef8a10ef290e042e24c.zip
binutils-01f573ad8aa539f972e2fef8a10ef290e042e24c.tar.gz
binutils-01f573ad8aa539f972e2fef8a10ef290e042e24c.tar.bz2
Add EM_IAMCU support to gold
elfcpp/ PR gold/19118 * elfcpp.h (EM): Add EM_IAMCU. gold/ PR gold/19118 * i386.cc (Target_iamcu): New class. (Target_selector_iamcu): Likewise. (Target_iamcu::iamcu_info): New variable. (target_selector_iamcu): Likewise.
Diffstat (limited to 'gold/i386.cc')
-rw-r--r--gold/i386.cc56
1 files changed, 56 insertions, 0 deletions
diff --git a/gold/i386.cc b/gold/i386.cc
index 086314e..202f518 100644
--- a/gold/i386.cc
+++ b/gold/i386.cc
@@ -4252,4 +4252,60 @@ class Target_selector_i386_nacl
Target_selector_i386_nacl target_selector_i386;
+// IAMCU variant. It uses EM_IAMCU, not EM_386.
+
+class Target_iamcu : public Target_i386
+{
+ public:
+ Target_iamcu()
+ : Target_i386(&iamcu_info)
+ { }
+
+ private:
+ // Information about this specific target which we pass to the
+ // general Target structure.
+ static const Target::Target_info iamcu_info;
+};
+
+const Target::Target_info Target_iamcu::iamcu_info =
+{
+ 32, // size
+ false, // is_big_endian
+ elfcpp::EM_IAMCU, // machine_code
+ false, // has_make_symbol
+ false, // has_resolve
+ true, // has_code_fill
+ true, // is_default_stack_executable
+ true, // can_icf_inline_merge_sections
+ '\0', // wrap_char
+ "/usr/lib/libc.so.1", // dynamic_linker
+ 0x08048000, // default_text_segment_address
+ 0x1000, // abi_pagesize (overridable by -z max-page-size)
+ 0x1000, // common_pagesize (overridable by -z common-page-size)
+ false, // isolate_execinstr
+ 0, // 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
+};
+
+class Target_selector_iamcu : public Target_selector
+{
+public:
+ Target_selector_iamcu()
+ : Target_selector(elfcpp::EM_IAMCU, 32, false, "elf32-iamcu",
+ "elf_iamcu")
+ { }
+
+ Target*
+ do_instantiate_target()
+ { return new Target_iamcu(); }
+};
+
+Target_selector_iamcu target_selector_iamcu;
+
} // End anonymous namespace.