mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
* 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:
parent
cb19ec34f5
commit
d507cf36a6
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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}
|
||||
};
|
||||
|
||||
|
@ -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}|
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user