[PATCH] RISC-V: Add support for vendor-specific relocations
Nelson Chu
nelson@rivosinc.com
Wed Apr 9 19:25:45 GMT 2025
Hi Alexey,
On Wed, Apr 9, 2025 at 4:59 PM Alexey Lapshin <alexey.lapshin@espressif.com>
wrote:
> diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c
> index ec254915c76..b9b0001f3f9 100644
> --- a/bfd/elfxx-riscv.c
> +++ b/bfd/elfxx-riscv.c
> @@ -960,6 +960,168 @@ static reloc_howto_type howto_table_internal[] =
> false), /* pcrel_offset */
> };
>
> +/* This howto table is used solely to provide relocation name strings. */
> +static reloc_howto_type howto_table_vendor[] = {
> + HOWTO (R_RISCV_CUSTOM0, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM0", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM1, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM1", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM2, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM2", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM3, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM3", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM4, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM4", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM5, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM5", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM6, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM6", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM7, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM7", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM8, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM8", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM9, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM9", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM10, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM10", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM11, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM11", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM12, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM12", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM13, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM13", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM14, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM14", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM15, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM15", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM16, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM16", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM17, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM17", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM18, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM18", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM19, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM19", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM20, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM20", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM21, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM21", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM22, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM22", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM23, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM23", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM24, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM24", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM25, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM25", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM26, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM26", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM27, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM27", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM28, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM28", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM29, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM29", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM30, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM30", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM31, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM31", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM32, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM32", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM33, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM33", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM34, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM34", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM35, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM35", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM36, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM36", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM37, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM37", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM38, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM38", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM39, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM39", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM40, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM40", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM41, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM41", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM42, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM42", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM43, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM43", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM44, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM44", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM45, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM45", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM46, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM46", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM47, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM47", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM48, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM48", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM49, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM49", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM50, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM50", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM51, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM51", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM52, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM52", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM53, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM53", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM54, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM54", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM55, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM55", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM56, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM56", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM57, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM57", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM58, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM58", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM59, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM59", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM60, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM60", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM61, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM61", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM62, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM62", false, 0, 0, false),
> + HOWTO (R_RISCV_CUSTOM63, 0, 0, 0, false, 0, complain_overflow_dont,
> + bfd_elf_generic_reloc, "R_RISCV_CUSTOM63", false, 0, 0, false)
> +};
>
I think the above shouldn't be necessary. We already have howto_table and
howto_table_internal for standard cases, and you will add a howto_table_esp
for esp vendor, so could we try to do everything right in the
riscv_elf_rtype_to_howto? Which means let riscv_elf_rtype_to_howto choose
the right how_to tables, including vendors', which is the howto_table_esp
for you. It is similar to the riscv_all_supported_ext, which collects all
tables of extensions, so we may have a howto_tables to collect howto_table,
howto_table_internal and howto_table_esp, .... Then define an enum similar
to riscv_prefix_ext_class, which should be passed to
riscv_elf_rtype_to_howto, and then can get the right howto table from
howto_tables with the enum. We will parse the R_RISCV_VENDOR reloc first,
and then get the vendor id, so the vendor id can be mapped to the right
enum.
if (rtype == NULL)
> printf (_("unrecognized: %-7lx"), (unsigned long) type &
> 0xffffffff);
> else
> @@ -2500,6 +2510,7 @@ dump_relocations (Filedata * filedata,
> sec_name = printable_section_name_from_index
> (filedata, psym->st_shndx, NULL);
>
> + vendor_id = strdup(sec_name);
> print_symbol_name (22, sec_name);
> }
> else if (strtab == NULL)
> @@ -2512,6 +2523,7 @@ dump_relocations (Filedata * filedata,
> }
> else
> {
> + vendor_id = strdup(strtab + psym->st_name);
> print_symbol_name (22, strtab + psym->st_name);
> if (version_string)
> printf (sym_info == symbol_public ? "@@%s" : "@%s",
>
The other targets don't have vendor id, so probably can have a better way
to let only riscv do this.
> diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
> index 8485ad441f5..a63d4bb0f2e 100644
> --- a/gas/config/tc-riscv.c
> +++ b/gas/config/tc-riscv.c
> @@ -734,6 +734,54 @@ riscv_target_format (void)
> return xlen == 64 ? "elf64-littleriscv" : "elf32-littleriscv";
> }
>
> +/* Insert R_RISCV_VENDOR relocation right before the custom relocation
> + * passed in fixP. */
> +static void
> +insert_vendor_relocation (fixS *fixP, segT target_seg, const char
> *vendor_id)
> +{
> + segT saved_seg;
> + symbolS *sym;
> + const flagword vendor_sym_flags = (BSF_NO_FLAGS | BSF_LOCAL);
> +
> + /* Check if the vendor ID symbol already exists. */
> + for (sym = symbol_rootP; sym != NULL; sym = symbol_next (sym))
> + {
> + /* Ensure we find a local symbol in the desired segment.
> + This prevents R_RISCV_VENDOR relocation against a global symbol
> + with the same name, if it exists. */
> + if (S_GET_SEGMENT (sym) == target_seg &&
> + symbol_get_bfdsym (sym)->flags == vendor_sym_flags &&
+ strcmp (S_GET_NAME (sym), vendor_id) == 0)
>
if (S_GET_SEGMENT (sym) == target_seg
&& symbol_get_bfdsym (sym)->flags == vendor_sym_flags
&& strcmp (S_GET_NAME (sym), vendor_id) == 0)
> + {
> + break; /* Symbol found. */
> + }
> + }
> +
> + /* If symbol does not exist, create a new one. */
> + if (sym == NULL)
> + {
> + sym = symbol_new (vendor_id, target_seg, &zero_address_frag, 0);
> + symbol_get_bfdsym (sym)->flags = vendor_sym_flags;
> + }
> +
> + /* Temporarily switch segment for fix_new(). */
> + saved_seg = now_seg;
> + now_seg = target_seg; /* Ensure fix_new_internal() uses the correct
> segment. */
> +
> + /* Insert the R_RISCV_VENDOR relocation. */
> + /* Since it's not possible to access the previous element in the fixup
> list,
> + it worked around by calling fix_at_start when 'where == 0'.
> + Otherwise, place the fix at 'where - 1' to ensure correct ordering of
> + R_RISCV_VENDOR and R_RISCV_CUSTOM. */
> + if (fixP->fx_where == 0)
> + fix_at_start (fixP->fx_frag, 4, sym, 0, false,
> BFD_RELOC_RISCV_VENDOR);
> + else
> + fix_new (fixP->fx_frag, fixP->fx_where - 1, 4, sym, 0, false,
> BFD_RELOC_RISCV_VENDOR);
>
I do not really understand the problem here. Why not just refer to how the
R_RISCV_RELAX insert? Just use the xmemdup to copy the fixup, and decide
the R_RISCV_VENDOR should be inserted into the current one or the copied
next one.
> diff --git a/include/elf/riscv.h b/include/elf/riscv.h
> index 2ea1ae82eb6..0f3a5c4ded6 100644
> --- a/include/elf/riscv.h
> +++ b/include/elf/riscv.h
> @@ -95,15 +95,113 @@ START_RELOC_NUMBERS (elf_riscv_reloc_type)
> RELOC_NUMBER (R_RISCV_TLSDESC_LOAD_LO12, 63)
> RELOC_NUMBER (R_RISCV_TLSDESC_ADD_LO12, 64)
> RELOC_NUMBER (R_RISCV_TLSDESC_CALL, 65)
> + /* update R_RISCV_internal_first if add new reloc. */
> +
> + /* Vendor-specific (nonstandard) relocations are defined here only to
> provide
> + string version names (in readelf). */
> + RELOC_NUMBER (R_RISCV_VENDOR, 191)
> + RELOC_NUMBER (R_RISCV_CUSTOM0, 192)
> + RELOC_NUMBER (R_RISCV_CUSTOM1, 193)
> + RELOC_NUMBER (R_RISCV_CUSTOM2, 194)
> + RELOC_NUMBER (R_RISCV_CUSTOM3, 195)
> + RELOC_NUMBER (R_RISCV_CUSTOM4, 196)
> + RELOC_NUMBER (R_RISCV_CUSTOM5, 197)
> + RELOC_NUMBER (R_RISCV_CUSTOM6, 198)
> + RELOC_NUMBER (R_RISCV_CUSTOM7, 199)
> + RELOC_NUMBER (R_RISCV_CUSTOM8, 200)
> + RELOC_NUMBER (R_RISCV_CUSTOM9, 201)
> + RELOC_NUMBER (R_RISCV_CUSTOM10, 202)
> + RELOC_NUMBER (R_RISCV_CUSTOM11, 203)
> + RELOC_NUMBER (R_RISCV_CUSTOM12, 204)
> + RELOC_NUMBER (R_RISCV_CUSTOM13, 205)
> + RELOC_NUMBER (R_RISCV_CUSTOM14, 206)
> + RELOC_NUMBER (R_RISCV_CUSTOM15, 207)
> + RELOC_NUMBER (R_RISCV_CUSTOM16, 208)
> + RELOC_NUMBER (R_RISCV_CUSTOM17, 209)
> + RELOC_NUMBER (R_RISCV_CUSTOM18, 210)
> + RELOC_NUMBER (R_RISCV_CUSTOM19, 211)
> + RELOC_NUMBER (R_RISCV_CUSTOM20, 212)
> + RELOC_NUMBER (R_RISCV_CUSTOM21, 213)
> + RELOC_NUMBER (R_RISCV_CUSTOM22, 214)
> + RELOC_NUMBER (R_RISCV_CUSTOM23, 215)
> + RELOC_NUMBER (R_RISCV_CUSTOM24, 216)
> + RELOC_NUMBER (R_RISCV_CUSTOM25, 217)
> + RELOC_NUMBER (R_RISCV_CUSTOM26, 218)
> + RELOC_NUMBER (R_RISCV_CUSTOM27, 219)
> + RELOC_NUMBER (R_RISCV_CUSTOM28, 220)
> + RELOC_NUMBER (R_RISCV_CUSTOM29, 221)
> + RELOC_NUMBER (R_RISCV_CUSTOM30, 222)
> + RELOC_NUMBER (R_RISCV_CUSTOM31, 223)
> + RELOC_NUMBER (R_RISCV_CUSTOM32, 224)
> + RELOC_NUMBER (R_RISCV_CUSTOM33, 225)
> + RELOC_NUMBER (R_RISCV_CUSTOM34, 226)
> + RELOC_NUMBER (R_RISCV_CUSTOM35, 227)
> + RELOC_NUMBER (R_RISCV_CUSTOM36, 228)
> + RELOC_NUMBER (R_RISCV_CUSTOM37, 229)
> + RELOC_NUMBER (R_RISCV_CUSTOM38, 230)
> + RELOC_NUMBER (R_RISCV_CUSTOM39, 231)
> + RELOC_NUMBER (R_RISCV_CUSTOM40, 232)
> + RELOC_NUMBER (R_RISCV_CUSTOM41, 233)
> + RELOC_NUMBER (R_RISCV_CUSTOM42, 234)
> + RELOC_NUMBER (R_RISCV_CUSTOM43, 235)
> + RELOC_NUMBER (R_RISCV_CUSTOM44, 236)
> + RELOC_NUMBER (R_RISCV_CUSTOM45, 237)
> + RELOC_NUMBER (R_RISCV_CUSTOM46, 238)
> + RELOC_NUMBER (R_RISCV_CUSTOM47, 239)
> + RELOC_NUMBER (R_RISCV_CUSTOM48, 240)
> + RELOC_NUMBER (R_RISCV_CUSTOM49, 241)
> + RELOC_NUMBER (R_RISCV_CUSTOM50, 242)
> + RELOC_NUMBER (R_RISCV_CUSTOM51, 243)
> + RELOC_NUMBER (R_RISCV_CUSTOM52, 244)
> + RELOC_NUMBER (R_RISCV_CUSTOM53, 245)
> + RELOC_NUMBER (R_RISCV_CUSTOM54, 246)
> + RELOC_NUMBER (R_RISCV_CUSTOM55, 247)
> + RELOC_NUMBER (R_RISCV_CUSTOM56, 248)
> + RELOC_NUMBER (R_RISCV_CUSTOM57, 249)
> + RELOC_NUMBER (R_RISCV_CUSTOM58, 250)
> + RELOC_NUMBER (R_RISCV_CUSTOM59, 251)
> + RELOC_NUMBER (R_RISCV_CUSTOM60, 252)
> + RELOC_NUMBER (R_RISCV_CUSTOM61, 253)
> + RELOC_NUMBER (R_RISCV_CUSTOM62, 254)
> + RELOC_NUMBER (R_RISCV_CUSTOM63, 255)
>
Likewise, these should be unnecessary.
> END_RELOC_NUMBERS (R_RISCV_max)
>
> /* Internal relocations used exclusively by the relaxation pass. */
> -#define R_RISCV_DELETE (R_RISCV_max)
> -#define R_RISCV_RVC_LUI (R_RISCV_max + 1)
> -#define R_RISCV_GPREL_I (R_RISCV_max + 2)
> -#define R_RISCV_GPREL_S (R_RISCV_max + 3)
> -#define R_RISCV_TPREL_I (R_RISCV_max + 4)
> -#define R_RISCV_TPREL_S (R_RISCV_max + 5)
> +#define R_RISCV_internal_first (R_RISCV_TLSDESC_CALL + 1)
> +#define R_RISCV_DELETE (R_RISCV_internal_first)
> +#define R_RISCV_RVC_LUI (R_RISCV_internal_first + 1)
> +#define R_RISCV_GPREL_I (R_RISCV_internal_first + 2)
> +#define R_RISCV_GPREL_S (R_RISCV_internal_first + 3)
> +#define R_RISCV_TPREL_I (R_RISCV_internal_first + 4)
> +#define R_RISCV_TPREL_S (R_RISCV_internal_first + 5)
In case one day the internal relocations may be overlapped with the vendor
stuff, I think we only need to define the R_RISCV_internal_first to 256
directly, after the end of vendor relocations.
Thanks
Nelson
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://sourceware.org/pipermail/binutils/attachments/20250410/16877fc9/attachment-0001.htm>
More information about the Binutils
mailing list