[v4,03/17] Add support for the RISC-V-specific ELF flags

Message ID 20180113103816.4861-4-palmer@dabbelt.com
State New, archived
Headers

Commit Message

Palmer Dabbelt Jan. 13, 2018, 10:38 a.m. UTC
  The RISC-V port defines ELF flags that enforce compatibility between
various objects.  This adds the shared support necessary for these
flags.

2018-01-13  Palmer Dabbelt  <palmer@sifive.com>

        * elf/cache.c (print_entry): Add FLAG_RISCV_FLOAT_ABI_SOFT and
        FLAG_RISCV_FLOAT_ABI_DOUBLE.
        * elf/elf.h (EF_RISCV_RVC): New define.
        (EF_RISCV_FLOAT_ABI): Likewise.
        (EF_RISCV_FLOAT_ABI_SOFT): Likewise.
        (EF_RISCV_FLOAT_ABI_SINGLE): Likewise.
        (EF_RISCV_FLOAT_ABI_DOUBLE): Likewise.
        (EF_RISCV_FLOAT_ABI_QUAD): Likewise.
        * sysdeps/generic/ldconfig.h (FLAG_RISCV_FLOAT_ABI_SOFT): New
        define.
        (FLAG_RISCV_FLOAT_ABI_DOUBLE): Likewise.
---
 elf/cache.c                | 4 ++++
 elf/elf.h                  | 8 ++++++++
 sysdeps/generic/ldconfig.h | 2 ++
 3 files changed, 14 insertions(+)
  

Comments

Joseph Myers Jan. 15, 2018, 4:45 p.m. UTC | #1
On Sat, 13 Jan 2018, Palmer Dabbelt wrote:

> diff --git a/elf/cache.c b/elf/cache.c
> index 1ec6ab36e7f7..1202c215016a 100644
> --- a/elf/cache.c
> +++ b/elf/cache.c
> @@ -114,6 +114,10 @@ print_entry (const char *lib, int flag, unsigned int osversion,
>      case FLAG_MIPS64_LIBN64_NAN2008:
>        fputs (",64bit,nan2008", stdout);
>        break;
> +    case FLAG_RISCV_FLOAT_ABI_SOFT:
> +      fputs (",soft-float", stdout);
> +    case FLAG_RISCV_FLOAT_ABI_DOUBLE:
> +      fputs (",soft-float", stdout);

The latter description seems incorrect.
  
Palmer Dabbelt Jan. 15, 2018, 4:49 p.m. UTC | #2
On Mon, 15 Jan 2018 08:45:52 PST (-0800), joseph@codesourcery.com wrote:
> On Sat, 13 Jan 2018, Palmer Dabbelt wrote:
>
>> diff --git a/elf/cache.c b/elf/cache.c
>> index 1ec6ab36e7f7..1202c215016a 100644
>> --- a/elf/cache.c
>> +++ b/elf/cache.c
>> @@ -114,6 +114,10 @@ print_entry (const char *lib, int flag, unsigned int osversion,
>>      case FLAG_MIPS64_LIBN64_NAN2008:
>>        fputs (",64bit,nan2008", stdout);
>>        break;
>> +    case FLAG_RISCV_FLOAT_ABI_SOFT:
>> +      fputs (",soft-float", stdout);
>> +    case FLAG_RISCV_FLOAT_ABI_DOUBLE:
>> +      fputs (",soft-float", stdout);
>
> The latter description seems incorrect.

Sorry about that, I was up a bit too late.  It's been fixed.

Thanks!
  

Patch

diff --git a/elf/cache.c b/elf/cache.c
index 1ec6ab36e7f7..1202c215016a 100644
--- a/elf/cache.c
+++ b/elf/cache.c
@@ -114,6 +114,10 @@  print_entry (const char *lib, int flag, unsigned int osversion,
     case FLAG_MIPS64_LIBN64_NAN2008:
       fputs (",64bit,nan2008", stdout);
       break;
+    case FLAG_RISCV_FLOAT_ABI_SOFT:
+      fputs (",soft-float", stdout);
+    case FLAG_RISCV_FLOAT_ABI_DOUBLE:
+      fputs (",soft-float", stdout);
     case 0:
       break;
     default:
diff --git a/elf/elf.h b/elf/elf.h
index 031850377bb6..4cb18ff9c0a8 100644
--- a/elf/elf.h
+++ b/elf/elf.h
@@ -3762,6 +3762,14 @@  enum
 
 #define R_TILEGX_NUM		130
 
+/* RISC-V ELF Flags */
+#define EF_RISCV_RVC 			0x0001
+#define EF_RISCV_FLOAT_ABI 		0x0006
+#define EF_RISCV_FLOAT_ABI_SOFT 	0x0000
+#define EF_RISCV_FLOAT_ABI_SINGLE 	0x0002
+#define EF_RISCV_FLOAT_ABI_DOUBLE 	0x0004
+#define EF_RISCV_FLOAT_ABI_QUAD 	0x0006
+
 /* RISC-V relocations.  */
 #define R_RISCV_NONE          0
 #define R_RISCV_32            1
diff --git a/sysdeps/generic/ldconfig.h b/sysdeps/generic/ldconfig.h
index 74eb92e528d5..59e20dc3ef79 100644
--- a/sysdeps/generic/ldconfig.h
+++ b/sysdeps/generic/ldconfig.h
@@ -42,6 +42,8 @@ 
 #define FLAG_MIPS_LIB32_NAN2008		0x0c00
 #define FLAG_MIPS64_LIBN32_NAN2008	0x0d00
 #define FLAG_MIPS64_LIBN64_NAN2008	0x0e00
+#define FLAG_RISCV_FLOAT_ABI_SOFT	0x0f00
+#define FLAG_RISCV_FLOAT_ABI_DOUBLE	0x1000
 
 /* Name of auxiliary cache.  */
 #define _PATH_LDCONFIG_AUX_CACHE "/var/cache/ldconfig/aux-cache"