[PATCH] RISC-V: Allow 32-bit BFD to handle 64-bit objects

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] RISC-V: Allow 32-bit BFD to handle 64-bit objects

Palmer Dabbelt
We've been telling people that the riscv32-* and riscv64-* toolchains
are exactly the same, but it turns out we were lying: the riscv32-* BFD
doesn't handle 64-bit objects.  This fixes that difference, so the ports
are actually the same.

bfd/ChangeLog

2017-05-01  Palmer Dabbelt  <[hidden email]>

        * config.bfd (riscv32-*): Enable unconditionally.
        (riscv64-*): Likewise.
---
 bfd/ChangeLog  | 5 +++++
 bfd/config.bfd | 5 +----
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index dff6a59..478bd99 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2017-05-01  Palmer Dabbelt  <[hidden email]>
+
+ * config.bfd (riscv32-*): Enable unconditionally.
+ (riscv64-*): Likewise.
+
 2017-04-29  Alan Modra  <[hidden email]>
 
  PR 21432
diff --git a/bfd/config.bfd b/bfd/config.bfd
index 151de95..c8f9b48 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -1438,19 +1438,16 @@ case "${targ}" in
     targ_underscore=yes
     ;;
 
-#ifdef BFD64
   riscv32-*-*)
     targ_defvec=riscv_elf32_vec
-    targ_selvecs="riscv_elf32_vec"
+    targ_selvecs="riscv_elf32_vec riscv_elf64_vec"
     want64=true
     ;;
-
   riscv64-*-*)
     targ_defvec=riscv_elf64_vec
     targ_selvecs="riscv_elf32_vec riscv_elf64_vec"
     want64=true
     ;;
-#endif
 
   rl78-*-elf)
     targ_defvec=rl78_elf32_vec
--
2.10.2

Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] RISC-V: Allow 32-bit BFD to handle 64-bit objects

Jeff Law
On 05/01/2017 02:33 PM, Palmer Dabbelt wrote:

> We've been telling people that the riscv32-* and riscv64-* toolchains
> are exactly the same, but it turns out we were lying: the riscv32-* BFD
> doesn't handle 64-bit objects.  This fixes that difference, so the ports
> are actually the same.
>
> bfd/ChangeLog
>
> 2017-05-01  Palmer Dabbelt  <[hidden email]>
>
>          * config.bfd (riscv32-*): Enable unconditionally.
>          (riscv64-*): Likewise.
This is obviously a decision for the binutils maintainers, but I can
confirm that with the patch installed, GCC is able to build through
target-libgcc for riscv32, which it couldn't previously do because the
riscv32 BFD bits would blow up assembling the 64bit multilib code
produced by GCC.

jeff
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] RISC-V: Allow 32-bit BFD to handle 64-bit objects

Alan Modra-3
In reply to this post by Palmer Dabbelt
On Mon, May 01, 2017 at 01:33:03PM -0700, Palmer Dabbelt wrote:

> -#ifdef BFD64
>    riscv32-*-*)
>      targ_defvec=riscv_elf32_vec
> -    targ_selvecs="riscv_elf32_vec"
> +    targ_selvecs="riscv_elf32_vec riscv_elf64_vec"
>      want64=true
>      ;;
> -
>    riscv64-*-*)
>      targ_defvec=riscv_elf64_vec
>      targ_selvecs="riscv_elf32_vec riscv_elf64_vec"
>      want64=true
>      ;;
> -#endif

Removing the #ifdef isn't correct.  To see why, configure binutils
with --enable-targets=all on a 32-bit host.  OK without that change.

--
Alan Modra
Australia Development Lab, IBM
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] RISC-V: Allow 32-bit BFD to handle 64-bit objects

Palmer Dabbelt
On Mon, 01 May 2017 18:31:44 PDT (-0700), [hidden email] wrote:

> On Mon, May 01, 2017 at 01:33:03PM -0700, Palmer Dabbelt wrote:
>> -#ifdef BFD64
>>    riscv32-*-*)
>>      targ_defvec=riscv_elf32_vec
>> -    targ_selvecs="riscv_elf32_vec"
>> +    targ_selvecs="riscv_elf32_vec riscv_elf64_vec"
>>      want64=true
>>      ;;
>> -
>>    riscv64-*-*)
>>      targ_defvec=riscv_elf64_vec
>>      targ_selvecs="riscv_elf32_vec riscv_elf64_vec"
>>      want64=true
>>      ;;
>> -#endif
>
> Removing the #ifdef isn't correct.  To see why, configure binutils
> with --enable-targets=all on a 32-bit host.  OK without that change.

Thanks.  Committed as

commit 763a5fa4f330d6d3859c94a69ba1fcab09330cf9
Author: Palmer Dabbelt <[hidden email]>
Date:   Mon May 1 10:26:32 2017 -0700

    RISC-V: Allow 32-bit BFD to handle 64-bit objects

    We've been telling people that the riscv32-* and riscv64-* toolchains
    are exactly the same, but it turns out we were lying: the riscv32-* BFD
    doesn't handle 64-bit objects.  This fixes that difference, so the ports
    are actually the same.

    bfd/ChangeLog

    2017-05-01  Palmer Dabbelt  <[hidden email]>

            * config.bfd (riscv32-*): Enable rv64.

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index c62cf13..530ec1d 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,7 @@
+2017-05-01  Palmer Dabbelt  <[hidden email]>
+
+       * config.bfd (riscv32-*): Enable rv64.
+
 2017-05-02  Alan Modra  <[hidden email]>

        PR 21384
diff --git a/bfd/config.bfd b/bfd/config.bfd
index 151de95..eb6a958 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -1441,10 +1441,9 @@ case "${targ}" in
 #ifdef BFD64
   riscv32-*-*)
     targ_defvec=riscv_elf32_vec
-    targ_selvecs="riscv_elf32_vec"
+    targ_selvecs="riscv_elf32_vec riscv_elf64_vec"
     want64=true
     ;;
-
   riscv64-*-*)
     targ_defvec=riscv_elf64_vec
     targ_selvecs="riscv_elf32_vec riscv_elf64_vec"