diff options
author | Andrew Waterman <andrew@sifive.com> | 2016-12-18 22:53:50 -0800 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2016-12-20 12:26:34 +1030 |
commit | 2922d21da14b4711872371abacb16e8ab7c70894 (patch) | |
tree | 42987b9714a1c6641f3bc74c4a7e7230936545ff /binutils | |
parent | 1d61f7949f77796ee407466f3ca7f42dcde9251b (diff) | |
download | binutils-2922d21da14b4711872371abacb16e8ab7c70894.zip binutils-2922d21da14b4711872371abacb16e8ab7c70894.tar.gz binutils-2922d21da14b4711872371abacb16e8ab7c70894.tar.bz2 |
Re-work RISC-V gas flags: now we just support -mabi and -march
We've decided to standardize on two flags for RISC-V: "-march" sets the
target architecture (which determines which instructions can be
generated), and "-mabi" sets the target ABI. We needed to rework this
because the old flag set didn't support soft-float or single-float ABIs,
and didn't support an x32-style ABI on RISC-V.
Additionally, we've changed the behavior of the -march flag: it's now a
lot stricter and only parses things we can actually understand.
Additionally, it's now lowercase-only: the rationale is that while the
RISC-V ISA manual specifies that ISA strings are case-insensitive, in
Linux-land things are usually case-sensitive. Since this flag can be
used to determine library paths, we didn't want to bake some
case-insensitivity in there that would case trouble later.
This patch implements these two new flags and removes the old flags that
could conflict with these. There wasn't a RISC-V release before, so we
want to just support a clean flag set.
include/
* elf/riscv.h (EF_RISCV_SOFT_FLOAT): Don't define.
(EF_RISCV_FLOAT_ABI, EF_RISCV_FLOAT_ABI_SOFT): Define.
(EF_RISCV_FLOAT_ABI_SINGLE, EF_RISCV_FLOAT_ABI_DOUBLE): Define.
(EF_RISCV_FLOAT_ABI_QUAD): Define.
bfd/
* elfnn-riscv.c (_bfd_riscv_elf_merge_private_bfd_data): Use
EF_RISCV_FLOAT_ABI_SOFT instead of EF_RISCV_SOFT_FLOAT.
binutils/
* readelf.c (get_machine_flags): Use
EF_RISCV_FLOAT_ABI_{SOFT,SINGLE,DOBULE,QUAD) instead of
EF_RISCV_{SOFT,HARD}_FLOAT.
gas/
* config/tc-riscv.h (xlen): Delete.
* config/tc-riscv.c (xlen): Make static.
(abi_xlen): New variable.
(options): Replace OPTION_{M32,M64,MSOFT_FLOAT,MHARD_FLOAT,MRVC}
with OPTION_MABI.
(md_longopts): Likewise.
(md_parse_option): Likewise.
(riscv_elf_final_processing): Likewise.
* doc/as.texinfo (Target RISC-V options): Likewise.
* doc/c-riscv.texi (OPTIONS): Likewise.
* config/tc-riscv.c (float_mode): Removed.
(float_abi): New type, specifies the floating-point ABI.
(riscv_set_abi): New function.
(riscv_add_subset): Only allow lower-case ISA names and require
them to start with "rv".
(riscv_after_parse_args): Likewise.
opcodes/
* riscv-dis.c (riscv_disassemble_insn): Default to the ELF's
XLEN when none is provided.
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/ChangeLog | 6 | ||||
-rw-r--r-- | binutils/readelf.c | 21 |
2 files changed, 25 insertions, 2 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 057e309..fd86ed5 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,9 @@ +2016-12-20 Andrew Waterman <andrew@sifive.com> + + * readelf.c (get_machine_flags): Use + EF_RISCV_FLOAT_ABI_{SOFT,SINGLE,DOBULE,QUAD) instead of + EF_RISCV_{SOFT,HARD}_FLOAT. + 2016-12-14 Maciej W. Rozycki <macro@imgtec.com> * testsuite/binutils-all/mips/mips-ase-1.d: New test. diff --git a/binutils/readelf.c b/binutils/readelf.c index c8e9726..873a471 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -3317,8 +3317,25 @@ get_machine_flags (unsigned e_flags, unsigned e_machine) case EM_RISCV: if (e_flags & EF_RISCV_RVC) strcat (buf, ", RVC"); - if (e_flags & EF_RISCV_SOFT_FLOAT) - strcat (buf, ", soft-float ABI"); + + switch (e_flags & EF_RISCV_FLOAT_ABI) + { + case EF_RISCV_FLOAT_ABI_SOFT: + strcat (buf, ", soft-float ABI"); + break; + + case EF_RISCV_FLOAT_ABI_SINGLE: + strcat (buf, ", single-float ABI"); + break; + + case EF_RISCV_FLOAT_ABI_DOUBLE: + strcat (buf, ", double-float ABI"); + break; + + case EF_RISCV_FLOAT_ABI_QUAD: + strcat (buf, ", quad-float ABI"); + break; + } break; case EM_SH: |