aboutsummaryrefslogtreecommitdiff
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
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.
-rw-r--r--elfcpp/ChangeLog5
-rw-r--r--elfcpp/elfcpp.h2
-rw-r--r--gold/ChangeLog8
-rw-r--r--gold/i386.cc56
4 files changed, 70 insertions, 1 deletions
diff --git a/elfcpp/ChangeLog b/elfcpp/ChangeLog
index 042d86e..18c1d5a 100644
--- a/elfcpp/ChangeLog
+++ b/elfcpp/ChangeLog
@@ -1,3 +1,8 @@
+2015-10-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gold/19118
+ * elfcpp.h (EM): Add EM_IAMCU.
+
2015-10-02 H.J. Lu <hongjiu.lu@intel.com>
PR gold/19060
diff --git a/elfcpp/elfcpp.h b/elfcpp/elfcpp.h
index 70380a5..0e6833f 100644
--- a/elfcpp/elfcpp.h
+++ b/elfcpp/elfcpp.h
@@ -173,7 +173,7 @@ enum EM
EM_386 = 3,
EM_68K = 4,
EM_88K = 5,
- // 6 used to be EM_486
+ EM_IAMCU = 6,
EM_860 = 7,
EM_MIPS = 8,
EM_S370 = 9,
diff --git a/gold/ChangeLog b/gold/ChangeLog
index e13392a..ff11c88 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,11 @@
+2015-10-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gold/19118
+ * i386.cc (Target_iamcu): New class.
+ (Target_selector_iamcu): Likewise.
+ (Target_iamcu::iamcu_info): New variable.
+ (target_selector_iamcu): Likewise.
+
2015-10-07 Andreas Schwab <schwab@suse.de>
* aarch64.cc (aarch64_info): Set abi_pagesize to 64K.
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.