Re: [PATCH 5/5] RISC-V: Add configure support riscv*-linux*.

Palmer Dabbelt
2018-08-08T20:49:45Z

On Wed, 08 Aug 2018 10:29:26 PDT (-0700), tom@tromey.com wrote:
>>>>>> "Jim" == Jim Wilson <jimw@sifive.com> writes:
>
> Jim> * Makefile.in (ALLDEPFILES): Add riscv-linux-nat.c, riscv-linux-tdep.c.
>
> This doesn't mention the ALL_TARGET_OBS change.
>
> Jim> * NEWS: Mention new GNU/Linux RISC-V target.
>
> Eli should review this bit.
>
> Jim> * configure.host: Add riscv*-*-linux*.
> Jim> * configure.nat: Add riscv*.
> Jim> * configure.tgt: Add riscv*-*-linux*.
>
> These parts are ok.
>
> Jim> diff --git a/gdb/Makefile.in b/gdb/Makefile.in
> Jim> index 8c744d70c0..280b3b1283 100644
> Jim> --- a/gdb/Makefile.in
> Jim> +++ b/gdb/Makefile.in
> Jim> @@ -752,6 +752,8 @@ ALL_TARGET_OBS = \
> Jim> ppc-sysv-tdep.o \
> Jim> ppc64-tdep.o \
> Jim> ravenscar-thread.o \
> Jim> + riscv-linux-nat.o \
> Jim> + riscv-linux-tdep.o \
> Jim> riscv-tdep.o \
> Jim> rl78-tdep.o \
> Jim> rs6000-aix-tdep.o \
>
> I think only the tdep file should be listed here.
>
> ALL_TARGET_OBS is used when --enable-targets=all is given.
> In this case, we would not want the riscv-linux-nat.o object to be
> linked in, since we're not necessarily building on linux.
>
> Is riscv a 64-bit architecture? (I don't know.) If so, gdb still
> splits 64-bit targets into a separate variable, I think in case one is
> building on a 32-bit machine without a 64-bit integer type (or maybe if
> you didn't want to use the extra memory to inflate a bunch of type
> sizes, not sure). In this case you'd want to add the tdep file to
> ALL_64_TARGET_OBS instead.

RISC-V is actually a family of ISAs, not one specific ISA. There are 4 base
ISAs: rv32e (16 32-bit registers), rv32i (32 32-bit registers), rv64i (32
64-bit registers), and rv128i (32 128-bit revisers). They all look very
similar and we developed the ports together, so they share the vast majority of
the source. Since they're so similar we try to make sure that the various
toolchain components always support all of them (aside from rv128i, which
nobody has started serious work on and is only a placeholder in the spec).

To enable this support in BFD we decided to put both the 32-bit and 64-bit
RISC-V targets in the list of 32-bit targets. This allows toolchains
configured with the 32-bit tuples to generate code for the 64-bit targets,
which when coupled with multilib gives you a functioning setup.

I'd like to keep this behavior in GDB if possible, so "riscv32-unknown-elf-gdb"
can debug rv64i-based targets. One of my goals is to rely as little as
possible on the tuple so users don't have to go find and build a whole bunch of
them -- whenever I'm a user I find that to be a pain.

> I wonder if this 32/64 bit thing is needed any more.

Part of our rationale for doing this was that if you can build GCC 7 (the first
version we support), then your host probably has support for 64-bit integer
types. Nobody else has seemed to notice yet, but there also aren't that many
RISC-V users so we're far from a representative sample.