diff options
author | Paul Brook <paul@codesourcery.com> | 2004-03-23 23:05:52 +0000 |
---|---|---|
committer | Paul Brook <paul@codesourcery.com> | 2004-03-23 23:05:52 +0000 |
commit | d507cf36a6e8dd590757a05889cd9f2c1dd9aba5 (patch) | |
tree | b81eeb7d994cc02d9639fea1325460a7eda5d7b2 /gas | |
parent | cb19ec34f51c0010b13a00221787e7363deb26ed (diff) | |
download | gdb-d507cf36a6e8dd590757a05889cd9f2c1dd9aba5.zip gdb-d507cf36a6e8dd590757a05889cd9f2c1dd9aba5.tar.gz gdb-d507cf36a6e8dd590757a05889cd9f2c1dd9aba5.tar.bz2 |
* 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.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 10 | ||||
-rw-r--r-- | gas/config/tc-arm.c | 98 | ||||
-rw-r--r-- | gas/doc/as.texinfo | 1 | ||||
-rw-r--r-- | gas/doc/c-arm.texi | 9 |
4 files changed, 92 insertions, 26 deletions
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 |