This is the mail archive of the
elfutils-devel@sourceware.org
mailing list for the elfutils project.
[PATCH 4/6] Machine flag check support for SuperH.
- From: Matt Fleming <matt at console-pimps dot org>
- To: elfutils-devel at lists dot fedorahosted dot org
- Date: Sat, 10 Apr 2010 20:11:48 +0100
- Subject: [PATCH 4/6] Machine flag check support for SuperH.
---
backends/sh_init.c | 1 +
backends/sh_symbol.c | 35 +++++++++++++++++++++++++++++++++++
libelf/elf.h | 24 ++++++++++++++++++++++++
3 files changed, 60 insertions(+), 0 deletions(-)
diff --git a/backends/sh_init.c b/backends/sh_init.c
index 480f1bc..686467b 100644
--- a/backends/sh_init.c
+++ b/backends/sh_init.c
@@ -52,6 +52,7 @@ sh_init (elf, machine, eh, ehlen)
sh_init_reloc (eh);
HOOK (eh, reloc_simple_type);
HOOK (eh, gotpc_reloc_check);
+ HOOK (eh, machine_flag_check);
HOOK (eh, core_note);
HOOK (eh, register_info);
diff --git a/backends/sh_symbol.c b/backends/sh_symbol.c
index 26000cc..9fb5db4 100644
--- a/backends/sh_symbol.c
+++ b/backends/sh_symbol.c
@@ -54,3 +54,38 @@ sh_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type)
return ELF_T_NUM;
}
}
+
+/* Check whether machine flags are valid. */
+bool
+sh_machine_flag_check (GElf_Word flags)
+{
+ switch (flags & EF_SH_MACH_MASK)
+ {
+ case EF_SH_UNKNOWN:
+ case EF_SH1:
+ case EF_SH2:
+ case EF_SH3:
+ case EF_SH_DSP:
+ case EF_SH3_DSP:
+ case EF_SH4AL_DSP:
+ case EF_SH3E:
+ case EF_SH4:
+ case EF_SH2E:
+ case EF_SH4A:
+ case EF_SH2A:
+ case EF_SH4_NOFPU:
+ case EF_SH4A_NOFPU:
+ case EF_SH4_NOMMU_NOFPU:
+ case EF_SH2A_NOFPU:
+ case EF_SH3_NOMMU:
+ case EF_SH2A_SH4_NOFPU:
+ case EF_SH2A_SH3_NOFPU:
+ case EF_SH2A_SH4:
+ case EF_SH2A_SH3E:
+ break;
+ default:
+ return false;
+ }
+
+ return ((flags &~ (EF_SH_MACH_MASK)) == 0);
+}
diff --git a/libelf/elf.h b/libelf/elf.h
index f41a026..418bbd5 100644
--- a/libelf/elf.h
+++ b/libelf/elf.h
@@ -2476,6 +2476,30 @@ typedef Elf32_Addr Elf32_Conflict;
/* SH specific declarations */
+/* Processor specific flags for the ELF header e_flags field. */
+#define EF_SH_MACH_MASK 0x1f
+#define EF_SH_UNKNOWN 0x0
+#define EF_SH1 0x1
+#define EF_SH2 0x2
+#define EF_SH3 0x3
+#define EF_SH_DSP 0x4
+#define EF_SH3_DSP 0x5
+#define EF_SH4AL_DSP 0x6
+#define EF_SH3E 0x8
+#define EF_SH4 0x9
+#define EF_SH2E 0xb
+#define EF_SH4A 0xc
+#define EF_SH2A 0xd
+#define EF_SH4_NOFPU 0x10
+#define EF_SH4A_NOFPU 0x11
+#define EF_SH4_NOMMU_NOFPU 0x12
+#define EF_SH2A_NOFPU 0x13
+#define EF_SH3_NOMMU 0x14
+#define EF_SH2A_SH4_NOFPU 0x15
+#define EF_SH2A_SH3_NOFPU 0x16
+#define EF_SH2A_SH4 0x17
+#define EF_SH2A_SH3E 0x18
+
/* SH relocs. */
#define R_SH_NONE 0
#define R_SH_DIR32 1
--
1.7.0.2