* bfd/elf32-arm.h (arm_print_private_bfd_data): Add EABI v3.

* binutils/readelf.c (decode_ARM_machine_flags): Add EABI v3.
	* gas/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.
	* include/elf/arm.h (EF_ERM_BE8, EF_ARM_LE8, EF_ARM_EABI_VER3): Add.
	* doc/as.texinf <ARM>: Document -meabi.
	* doc/c-arm.texi: Ditto.
This commit is contained in:
Paul Brook 2004-03-23 23:05:52 +00:00
parent cb19ec34f5
commit d507cf36a6
10 changed files with 147 additions and 25 deletions

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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;
unsigned int flags = meabi_flags;
/* 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. */
switch (meabi_flags)
{
flags |= F_SOFT_FLOAT;
}
switch (mfloat_abi_opt)
{
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}
};

View File

@ -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}|

View File

@ -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

View File

@ -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.

View File

@ -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