[PATCH v3 2/9] RISC-V: Add TLSDESC reloc definitions.

Nelson Chu nelson@rivosinc.com
Mon Feb 19 00:49:04 GMT 2024


On Tue, Nov 28, 2023 at 4:51 PM Tatsuyuki Ishi <ishitatsuyuki@gmail.com>
wrote:

> bfd/
>     * elfxx-riscv.c: Add 5 TLSDESC reloc descriptions.
>     * reloc.c: Likewise.
>     * libbfd.h: Regenerate.
>     * bfd-in2.h: Regenerate.
> include/
>     * elf/riscv.h: Add 5 TLSDESC reloc descriptions.
> ---
>  bfd/bfd-in2.h       |  4 +++
>  bfd/elfxx-riscv.c   | 75 ++++++++++++++++++++++++++++++++++++++++++++-
>  bfd/libbfd.h        |  4 +++
>  bfd/reloc.c         |  8 +++++
>  include/elf/riscv.h |  5 +++
>  5 files changed, 95 insertions(+), 1 deletion(-)
>
> diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
> index 040d5560cdf..9bc6b9885ff 100644
> --- a/bfd/bfd-in2.h
> +++ b/bfd/bfd-in2.h
> @@ -5407,6 +5407,10 @@ enum bfd_reloc_code_real
>    BFD_RELOC_RISCV_TLS_DTPREL64,
>    BFD_RELOC_RISCV_TLS_TPREL32,
>    BFD_RELOC_RISCV_TLS_TPREL64,
> +  BFD_RELOC_RISCV_TLSDESC_HI20,
> +  BFD_RELOC_RISCV_TLSDESC_LOAD_LO12,
> +  BFD_RELOC_RISCV_TLSDESC_ADD_LO12,
> +  BFD_RELOC_RISCV_TLSDESC_CALL,
>    BFD_RELOC_RISCV_ALIGN,
>    BFD_RELOC_RISCV_RVC_BRANCH,
>    BFD_RELOC_RISCV_RVC_JUMP,
> diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c
> index 567631e7d96..65d676b06b1 100644
> --- a/bfd/elfxx-riscv.c
> +++ b/bfd/elfxx-riscv.c
> @@ -218,7 +218,20 @@ static reloc_howto_type howto_table[] =
>          MINUS_ONE,                     /* dst_mask */
>          false),                        /* pcrel_offset */
>
> -  EMPTY_HOWTO (12),
> +  HOWTO (R_RISCV_TLSDESC,              /* type */
> +        0,                             /* rightshift */
> +        0,                             /* size is handled by dynamic
> linker */
> +        0,                             /* bitsize */
> +        false,                         /* pc_relative */
> +        0,                             /* bitpos */
> +        complain_overflow_dont,        /* complain_on_overflow */
> +        bfd_elf_generic_reloc,         /* special_function */
> +        "R_RISCV_TLSDESC",             /* name */
> +        false,                         /* partial_inplace */
> +        0,                             /* src_mask */
> +        MINUS_ONE,                     /* dst_mask */
> +        false),                        /* pcrel_offset */
> +
>    EMPTY_HOWTO (13),
>    EMPTY_HOWTO (14),
>    EMPTY_HOWTO (15),
> @@ -808,6 +821,62 @@ static reloc_howto_type howto_table[] =
>          0,                             /* src_mask */
>          0,                             /* dst_mask */
>          false),                        /* pcrel_offset */
> +
> +  HOWTO (R_RISCV_TLSDESC_HI20,         /* type */
> +        0,                             /* rightshift */
> +        4,                             /* size */
> +        32,                            /* bitsize */
> +        true,                          /* pc_relative */
> +        0,                             /* bitpos */
> +        complain_overflow_signed,      /* complain_on_overflow */
> +        bfd_elf_generic_reloc,         /* special_function */
> +        "R_RISCV_TLSDESC_HI20",        /* name */
> +        true,                          /* partial_inplace */
> +        0,                             /* src_mask */
> +        ENCODE_UTYPE_IMM (-1U),        /* dst_mask */
> +        false),                        /* pcrel_offset */
>

complain_overflow_dont?


> +  HOWTO (R_RISCV_TLSDESC_LOAD_LO12,    /* type */
> +        0,                             /* rightshift */
> +        4,                             /* size */
> +        32,                            /* bitsize */
> +        false,                         /* pc_relative */
> +        0,                             /* bitpos */
> +        complain_overflow_signed,      /* complain_on_overflow */
> +        bfd_elf_generic_reloc,         /* special_function */
> +        "R_RISCV_TLSDESC_LOAD_LO12",   /* name */
> +        false,                         /* partial_inplace */
> +        0,                             /* src_mask */
> +        ENCODE_ITYPE_IMM (-1U),        /* dst_mask */
> +        false),                        /* pcrel_offset */
>

Likewise.


> +  HOWTO (R_RISCV_TLSDESC_ADD_LO12,     /* type */
> +        0,                             /* rightshift */
> +        4,                             /* size */
> +        32,                            /* bitsize */
> +        false,                         /* pc_relative */
> +        0,                             /* bitpos */
> +        complain_overflow_signed,      /* complain_on_overflow */
> +        bfd_elf_generic_reloc,         /* special_function */
> +        "R_RISCV_TLSDESC_ADD_LO12",    /* name */
> +        false,                         /* partial_inplace */
> +        0,                             /* src_mask */
> +        ENCODE_ITYPE_IMM (-1U),        /* dst_mask */
> +        false),                        /* pcrel_offset */
>

Likewise.


> +  HOWTO (R_RISCV_TLSDESC_CALL,         /* type */
> +        0,                             /* rightshift */
> +        0,                             /* size */
> +        0,                             /* bitsize */
> +        false,                         /* pc_relative */
> +        0,                             /* bitpos */
> +        complain_overflow_dont,        /* complain_on_overflow */
> +        bfd_elf_generic_reloc,         /* special_function */
> +        "R_RISCV_TLSDESC_CALL",        /* name */
> +        false,                         /* partial_inplace */
> +        0,                             /* src_mask */
> +        ENCODE_ITYPE_IMM (-1U),        /* dst_mask */
> +        false)                         /* pcrel_offset */
>  };
>
>  static reloc_howto_type howto_table_internal[] =
> @@ -935,6 +1004,10 @@ static const struct elf_reloc_map riscv_reloc_map[] =
>    { BFD_RELOC_RISCV_TPREL_LO12_I, R_RISCV_TPREL_LO12_I },
>    { BFD_RELOC_RISCV_TLS_GOT_HI20, R_RISCV_TLS_GOT_HI20 },
>    { BFD_RELOC_RISCV_TLS_GD_HI20, R_RISCV_TLS_GD_HI20 },
> +  { BFD_RELOC_RISCV_TLSDESC_HI20, R_RISCV_TLSDESC_HI20 },
> +  { BFD_RELOC_RISCV_TLSDESC_LOAD_LO12, R_RISCV_TLSDESC_LOAD_LO12 },
> +  { BFD_RELOC_RISCV_TLSDESC_ADD_LO12, R_RISCV_TLSDESC_ADD_LO12 },
> +  { BFD_RELOC_RISCV_TLSDESC_CALL, R_RISCV_TLSDESC_CALL },
>    { BFD_RELOC_RISCV_ALIGN, R_RISCV_ALIGN },
>    { BFD_RELOC_RISCV_RVC_BRANCH, R_RISCV_RVC_BRANCH },
>    { BFD_RELOC_RISCV_RVC_JUMP, R_RISCV_RVC_JUMP },
> diff --git a/bfd/libbfd.h b/bfd/libbfd.h
> index cc432677a81..919b63d51a1 100644
> --- a/bfd/libbfd.h
> +++ b/bfd/libbfd.h
> @@ -2400,6 +2400,10 @@ static const char *const
> bfd_reloc_code_real_names[] = { "@@uninitialized@@",
>    "BFD_RELOC_RISCV_TLS_DTPREL64",
>    "BFD_RELOC_RISCV_TLS_TPREL32",
>    "BFD_RELOC_RISCV_TLS_TPREL64",
> +  "BFD_RELOC_RISCV_TLSDESC_HI20",
> +  "BFD_RELOC_RISCV_TLSDESC_LOAD_LO12",
> +  "BFD_RELOC_RISCV_TLSDESC_ADD_LO12",
> +  "BFD_RELOC_RISCV_TLSDESC_CALL",
>    "BFD_RELOC_RISCV_ALIGN",
>    "BFD_RELOC_RISCV_RVC_BRANCH",
>    "BFD_RELOC_RISCV_RVC_JUMP",
> diff --git a/bfd/reloc.c b/bfd/reloc.c
> index 93ebad879e0..345f444d17a 100644
> --- a/bfd/reloc.c
> +++ b/bfd/reloc.c
> @@ -4984,6 +4984,14 @@ ENUMX
>    BFD_RELOC_RISCV_TLS_TPREL32
>  ENUMX
>    BFD_RELOC_RISCV_TLS_TPREL64
> +ENUMX
> +  BFD_RELOC_RISCV_TLSDESC_HI20
> +ENUMX
> +  BFD_RELOC_RISCV_TLSDESC_LOAD_LO12
> +ENUMX
> +  BFD_RELOC_RISCV_TLSDESC_ADD_LO12
> +ENUMX
> +  BFD_RELOC_RISCV_TLSDESC_CALL
>  ENUMX
>    BFD_RELOC_RISCV_ALIGN
>  ENUMX
> diff --git a/include/elf/riscv.h b/include/elf/riscv.h
> index 56d419c665b..7f5c0407ac8 100644
> --- a/include/elf/riscv.h
> +++ b/include/elf/riscv.h
> @@ -44,6 +44,7 @@ START_RELOC_NUMBERS (elf_riscv_reloc_type)
>    RELOC_NUMBER (R_RISCV_TLS_DTPREL64, 9)
>    RELOC_NUMBER (R_RISCV_TLS_TPREL32, 10)
>    RELOC_NUMBER (R_RISCV_TLS_TPREL64, 11)
> +  RELOC_NUMBER (R_RISCV_TLSDESC, 12)
>
>    /* Relocation types not used by the dynamic linker.  */
>    RELOC_NUMBER (R_RISCV_BRANCH, 16)
> @@ -90,6 +91,10 @@ START_RELOC_NUMBERS (elf_riscv_reloc_type)
>    /* Reserved 59 for R_RISCV_PLT32.  */
>    RELOC_NUMBER (R_RISCV_SET_ULEB128, 60)
>    RELOC_NUMBER (R_RISCV_SUB_ULEB128, 61)
> +  RELOC_NUMBER (R_RISCV_TLSDESC_HI20, 62)
> +  RELOC_NUMBER (R_RISCV_TLSDESC_LOAD_LO12, 63)
> +  RELOC_NUMBER (R_RISCV_TLSDESC_ADD_LO12, 64)
> +  RELOC_NUMBER (R_RISCV_TLSDESC_CALL, 65)
>  END_RELOC_NUMBERS (R_RISCV_max)
>
>  /* Internal relocations used exclusively by the relaxation pass.  */
> --
> 2.43.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://sourceware.org/pipermail/binutils/attachments/20240219/69e73dd1/attachment.htm>


More information about the Binutils mailing list