aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog4
-rw-r--r--bfd/elf32-arm.h12
-rw-r--r--binutils/ChangeLog4
-rw-r--r--binutils/readelf.c27
-rw-r--r--gas/ChangeLog10
-rw-r--r--gas/config/tc-arm.c98
-rw-r--r--gas/doc/as.texinfo1
-rw-r--r--gas/doc/c-arm.texi9
-rw-r--r--include/elf/ChangeLog4
-rw-r--r--include/elf/arm.h5
10 files changed, 148 insertions, 26 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index dac6564..6560ebc 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,7 @@
+2004-03-23 Paul Brook <paul@codesourcery.com>
+
+ * elf32-arm.h (arm_print_private_bfd_data): Add EABI v3.
+
2004-03-22 Bob Wilson <bob.wilson@acm.org>
* elf32-xtensa.c (elf_xtensa_check_relocs): Remove code to read
diff --git a/bfd/elf32-arm.h b/bfd/elf32-arm.h
index 2f6c22e..33f85bd 100644
--- a/bfd/elf32-arm.h
+++ b/bfd/elf32-arm.h
@@ -2679,6 +2679,18 @@ elf32_arm_print_private_bfd_data (abfd, ptr)
| EF_ARM_MAPSYMSFIRST);
break;
+ case EF_ARM_EABI_VER3:
+ fprintf (file, _(" [Version3 EABI]"));
+
+ if (flags & EF_ARM_BE8)
+ fprintf (file, _(" [BE8]"));
+
+ if (flags & EF_ARM_LE8)
+ fprintf (file, _(" [LE8]"));
+
+ flags &= ~(EF_ARM_LE8 | EF_ARM_BE8);
+ break;
+
default:
fprintf (file, _(" <EABI version unrecognised>"));
break;
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 2e41bc8..94d368c 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,7 @@
+2004-03-23 Paul Brook <paul@codesourcery.com>
+
+ * readelf.c (decode_ARM_machine_flags): Add EABI v3.
+
2004-03-21 Richard Henderson <rth@redhat.com>
* readelf.c (display_debug_frames): Don't crash for mismatched
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 3561eff..c8d6ad9 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -1740,6 +1740,33 @@ decode_ARM_machine_flags (unsigned e_flags, char buf[])
}
break;
+ case EF_ARM_EABI_VER3:
+ strcat (buf, ", Version3 EABI");
+ while (e_flags)
+ {
+ unsigned flag;
+
+ /* Process flags one bit at a time. */
+ flag = e_flags & - e_flags;
+ e_flags &= ~ flag;
+
+ switch (flag)
+ {
+ case EF_ARM_BE8:
+ strcat (buf, ", BE8");
+ break;
+
+ case EF_ARM_LE8:
+ strcat (buf, ", LE8");
+ break;
+
+ default:
+ unknown = 1;
+ break;
+ }
+ }
+ break;
+
case EF_ARM_EABI_UNKNOWN:
strcat (buf, ", GNU EABI");
while (e_flags)
diff --git a/gas/ChangeLog b/gas/ChangeLog
index ec4e566..f96a828 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,13 @@
+2004-03-23 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (meabi_flags): New variable.
+ (arm_parse_eabi): New function.
+ (md_begin): Set flags for EABI v3.
+ (arm_eabis): Add.
+ (arm_long_opts): Add meabi.
+ * doc/as.texinf <ARM>: Document -meabi.
+ * doc/c-arm.texi: Ditto.
+
2004-03-22 Bob Wilson <bob.wilson@acm.org>
* config/tc-xtensa.c (xtensa_post_relax_hook): Create literal
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 69b2c21..bcf5769 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -191,6 +191,7 @@ static int march_cpu_opt = -1;
static int march_fpu_opt = -1;
static int mfpu_opt = -1;
static int mfloat_abi_opt = -1;
+static int meabi_flags = EF_ARM_EABI_UNKNOWN;
/* This array holds the chars that always start a comment. If the
pre-processor is disabled, these aren't very useful. */
@@ -2551,6 +2552,7 @@ static int arm_parse_cpu PARAMS ((char *));
static int arm_parse_arch PARAMS ((char *));
static int arm_parse_fpu PARAMS ((char *));
static int arm_parse_float_abi PARAMS ((char *));
+static int arm_parse_eabi PARAMS ((char *));
#if 0 /* Suppressed - for now. */
#if defined OBJ_COFF || defined OBJ_ELF
static void arm_add_note PARAMS ((const char *, const char *, unsigned int));
@@ -11687,37 +11689,49 @@ md_begin ()
#if defined OBJ_COFF || defined OBJ_ELF
{
- unsigned int flags = 0;
-
- /* Set the flags in the private structure. */
- if (uses_apcs_26) flags |= F_APCS26;
- if (support_interwork) flags |= F_INTERWORK;
- if (uses_apcs_float) flags |= F_APCS_FLOAT;
- if (pic_code) flags |= F_PIC;
- if ((cpu_variant & FPU_ANY) == FPU_NONE
- || (cpu_variant & FPU_ANY) == FPU_ARCH_VFP) /* VFP layout only. */
- {
- flags |= F_SOFT_FLOAT;
- }
- switch (mfloat_abi_opt)
+ unsigned int flags = meabi_flags;
+
+ switch (meabi_flags)
{
- case ARM_FLOAT_ABI_SOFT:
- case ARM_FLOAT_ABI_SOFTFP:
- flags |= F_SOFT_FLOAT;
- break;
+ case EF_ARM_EABI_UNKNOWN:
+ /* Set the flags in the private structure. */
+ if (uses_apcs_26) flags |= F_APCS26;
+ if (support_interwork) flags |= F_INTERWORK;
+ if (uses_apcs_float) flags |= F_APCS_FLOAT;
+ if (pic_code) flags |= F_PIC;
+ if ((cpu_variant & FPU_ANY) == FPU_NONE
+ || (cpu_variant & FPU_ANY) == FPU_ARCH_VFP) /* VFP layout only. */
+ {
+ flags |= F_SOFT_FLOAT;
+ }
+ switch (mfloat_abi_opt)
+ {
+ case ARM_FLOAT_ABI_SOFT:
+ case ARM_FLOAT_ABI_SOFTFP:
+ flags |= F_SOFT_FLOAT;
+ break;
- case ARM_FLOAT_ABI_HARD:
- if (flags & F_SOFT_FLOAT)
- as_bad (_("hard-float conflicts with specified fpu"));
- break;
- }
- /* Using VFP conventions (even if soft-float). */
- if (cpu_variant & FPU_VFP_EXT_NONE) flags |= F_VFP_FLOAT;
+ case ARM_FLOAT_ABI_HARD:
+ if (flags & F_SOFT_FLOAT)
+ as_bad (_("hard-float conflicts with specified fpu"));
+ break;
+ }
+ /* Using VFP conventions (even if soft-float). */
+ if (cpu_variant & FPU_VFP_EXT_NONE) flags |= F_VFP_FLOAT;
#if defined OBJ_ELF
- if (cpu_variant & FPU_ARCH_MAVERICK)
- flags |= EF_ARM_MAVERICK_FLOAT;
+ if (cpu_variant & FPU_ARCH_MAVERICK)
+ flags |= EF_ARM_MAVERICK_FLOAT;
#endif
+ break;
+
+ case EF_ARM_EABI_VER3:
+ /* No additional flags to set. */
+ break;
+
+ default:
+ abort ();
+ }
bfd_set_private_flags (stdoutput, flags);
@@ -13450,6 +13464,20 @@ static struct arm_float_abi_option_table arm_float_abis[] =
{NULL, 0}
};
+struct arm_eabi_option_table
+{
+ char *name;
+ unsigned int value;
+};
+
+/* We only know hot to output GNU and ver 3 (AAELF) formats. */
+static struct arm_eabi_option_table arm_eabis[] =
+{
+ {"gnu", EF_ARM_EABI_UNKNOWN},
+ {"3", EF_ARM_EABI_VER3},
+ {NULL, 0}
+};
+
struct arm_long_option_table
{
char *option; /* Substring to match. */
@@ -13613,6 +13641,22 @@ arm_parse_float_abi (str)
return 0;
}
+static int
+arm_parse_eabi (str)
+ char * str;
+{
+ struct arm_eabi_option_table *opt;
+
+ for (opt = arm_eabis; opt->name != NULL; opt++)
+ if (strcmp (opt->name, str) == 0)
+ {
+ meabi_flags = opt->value;
+ return 1;
+ }
+ as_bad (_("unknown EABI `%s'\n"), str);
+ return 0;
+}
+
struct arm_long_option_table arm_long_opts[] =
{
{"mcpu=", N_("<cpu name>\t assemble for CPU <cpu name>"),
@@ -13623,6 +13667,8 @@ struct arm_long_option_table arm_long_opts[] =
arm_parse_fpu, NULL},
{"mfloat-abi=", N_("<abi>\t assemble for floating point ABI <abi>"),
arm_parse_float_abi, NULL},
+ {"meabi=", N_("<ver>\t assemble for eabi version <ver>"),
+ arm_parse_eabi, NULL},
{NULL, NULL, 0, NULL}
};
diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo
index d9d23df..fc02bb7 100644
--- a/gas/doc/as.texinfo
+++ b/gas/doc/as.texinfo
@@ -263,6 +263,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
[@b{-march}=@var{architecture}[+@var{extension}@dots{}]]
[@b{-mfpu}=@var{floating-point-format}]
[@b{-mfloat-abi}=@var{abi}]
+ [@b{-meabi}=@var{ver}]
[@b{-mthumb}]
[@b{-EB}|@b{-EL}]
[@b{-mapcs-32}|@b{-mapcs-26}|@b{-mapcs-float}|
diff --git a/gas/doc/c-arm.texi b/gas/doc/c-arm.texi
index 23cd7bb..e871d28 100644
--- a/gas/doc/c-arm.texi
+++ b/gas/doc/c-arm.texi
@@ -228,6 +228,15 @@ The following values are recognized:
and
@code{hard}.
+@cindex @code{-eabi=} command line option, ARM
+@item -meabi=@var{ver}
+This option specifies which EABI version the produced object files should
+conform to.
+The following values are recognised:
+@code{gnu}
+and
+@code{3}.
+
@cindex @code{-EB} command line option, ARM
@item -EB
This option specifies that the output generated by the assembler should
diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog
index 6e4d604..385b857 100644
--- a/include/elf/ChangeLog
+++ b/include/elf/ChangeLog
@@ -1,3 +1,7 @@
+2004-03-23 Paul Brook <paul@codesourcery.com>
+
+ * arm.h (EF_ERM_BE8, EF_ARM_LE8, EF_ARM_EABI_VER3): Add.
+
2003-03-03 Andrew Stubbs <andrew.stubbs@superh.com>
* sh.h: Add EF_SH4_NOMMU_NOFPU.
diff --git a/include/elf/arm.h b/include/elf/arm.h
index 181a9f0..158a4b5 100644
--- a/include/elf/arm.h
+++ b/include/elf/arm.h
@@ -42,10 +42,15 @@
#define EF_ARM_MAPSYMSFIRST 0x10 /* NB conflicts with EF_APCS_FLOAT */
#define EF_ARM_EABIMASK 0xFF000000
+/* Constants defined in AAELF. */
+#define EF_ARM_BE8 0x00800000
+#define EF_ARM_LE8 0x00400000
+
#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
#define EF_ARM_EABI_UNKNOWN 0x00000000
#define EF_ARM_EABI_VER1 0x01000000
#define EF_ARM_EABI_VER2 0x02000000
+#define EF_ARM_EABI_VER3 0x03000000
/* Local aliases for some flags to match names used by COFF port. */
#define F_INTERWORK EF_ARM_INTERWORK