You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
binutils/SOURCES/binutils-aarch64-RELR.patch

3523 lines
107 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

diff -rupN binutils,orig/bfd/elfnn-aarch64.c binutils-2.41/bfd/elfnn-aarch64.c
--- binutils,orig/bfd/elfnn-aarch64.c 2024-05-31 10:18:02.369948478 +0100
+++ binutils-2.41/bfd/elfnn-aarch64.c 2024-05-31 10:24:13.370523113 +0100
@@ -2706,6 +2706,19 @@ struct elf_aarch64_link_hash_table
/* Used by local STT_GNU_IFUNC symbols. */
htab_t loc_hash_table;
void * loc_hash_memory;
+
+ /* Array of relative relocs to be emitted in DT_RELR format. */
+ bfd_size_type relr_alloc;
+ bfd_size_type relr_count;
+ struct relr_entry
+ {
+ asection *sec;
+ bfd_vma off;
+ } *relr;
+ /* Sorted output addresses of above relative relocs. */
+ bfd_vma *relr_sorted;
+ /* Layout recomputation count. */
+ bfd_size_type relr_layout_iter;
};
/* Create an entry in an AArch64 ELF linker hash table. */
@@ -5974,6 +5987,18 @@ elfNN_aarch64_final_link_relocate (reloc
|| !(bfd_link_pie (info) || SYMBOLIC_BIND (info, h))
|| !h->def_regular))
outrel.r_info = ELFNN_R_INFO (h->dynindx, r_type);
+ else if (info->enable_dt_relr
+ && input_section->alignment_power != 0
+ && rel->r_offset % 2 == 0)
+ {
+ /* Don't emit a relative relocation that is packed, only
+ apply the addend. */
+ if (globals->no_apply_dynamic_relocs)
+ return bfd_reloc_ok;
+ return _bfd_final_link_relocate (howto, input_bfd, input_section,
+ contents, rel->r_offset, value,
+ signed_addend);
+ }
else
{
int symbol;
@@ -6240,7 +6265,8 @@ elfNN_aarch64_final_link_relocate (reloc
addend, weak_undef_p);
}
- if (relative_reloc)
+ /* Emit relative relocations, but not if they are packed (DT_RELR). */
+ if (relative_reloc && !info->enable_dt_relr)
{
asection *s;
Elf_Internal_Rela outrel;
@@ -9172,6 +9198,363 @@ elfNN_aarch64_allocate_local_ifunc_dynre
return elfNN_aarch64_allocate_ifunc_dynrelocs (h, inf);
}
+/* Record a relative relocation that will be emitted packed (DT_RELR).
+ Called after relocation sections are sized, so undo the size accounting
+ for this relocation. */
+
+static bool
+record_relr (struct elf_aarch64_link_hash_table *htab, asection *sec,
+ bfd_vma off, asection *sreloc)
+{
+ /* Undo the relocation section size accounting. */
+ BFD_ASSERT (sreloc->size >= RELOC_SIZE (htab));
+ sreloc->size -= RELOC_SIZE (htab);
+ /* The packing format uses the last bit of the address so that
+ must be aligned. We don't pack relocations that may not be
+ aligned even though the final output address could end up
+ aligned, to avoid complex sizing logic for a rare case. */
+ BFD_ASSERT (off % 2 == 0 && sec->alignment_power > 0);
+ if (htab->relr_count >= htab->relr_alloc)
+ {
+ if (htab->relr_alloc == 0)
+ htab->relr_alloc = 4096;
+ else
+ htab->relr_alloc *= 2;
+ htab->relr = bfd_realloc (htab->relr,
+ htab->relr_alloc * sizeof (*htab->relr));
+ if (htab->relr == NULL)
+ return false;
+ }
+ htab->relr[htab->relr_count].sec = sec;
+ htab->relr[htab->relr_count].off = off;
+ htab->relr_count++;
+ return true;
+}
+
+/* Follow elfNN_aarch64_allocate_dynrelocs, but only record relative
+ relocations against the GOT and undo their previous size accounting. */
+
+static bool
+record_relr_dyn_got_relocs (struct elf_link_hash_entry *h, void *inf)
+{
+
+ if (h->root.type == bfd_link_hash_indirect)
+ return true;
+ if (h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ if (h->type == STT_GNU_IFUNC && h->def_regular)
+ return true;
+ if (h->got.refcount <= 0)
+ return true;
+ if (elf_aarch64_hash_entry (h)->got_type != GOT_NORMAL)
+ return true;
+
+ struct bfd_link_info *info = (struct bfd_link_info *) inf;
+ struct elf_aarch64_link_hash_table *htab = elf_aarch64_hash_table (info);
+
+ if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || h->root.type != bfd_link_hash_undefweak)
+ && bfd_link_pic (info)
+ /* Undefined weak symbol in static PIE resolves to 0 without
+ any dynamic relocations. */
+ && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
+ {
+ bool relative_reloc = SYMBOL_REFERENCES_LOCAL (info, h)
+ && !bfd_is_abs_symbol (&h->root);
+ if (relative_reloc)
+ if (!record_relr (htab, htab->root.sgot, h->got.offset,
+ htab->root.srelgot))
+ return false;
+ }
+ return true;
+}
+
+/* Record packed relative relocs against the GOT for local symbols.
+ Undo the size accounting of elfNN_aarch64_late_size_sections. */
+
+static bool
+record_relr_local_got_relocs (bfd *input_bfd, struct bfd_link_info *info)
+{
+ struct elf_aarch64_local_symbol *locals;
+ Elf_Internal_Shdr *symtab_hdr;
+ struct elf_aarch64_link_hash_table *htab;
+
+ if (!bfd_link_pic (info))
+ return true;
+
+ locals = elf_aarch64_locals (input_bfd);
+ if (locals == NULL)
+ return true;
+
+ symtab_hdr = &elf_symtab_hdr (input_bfd);
+ htab = elf_aarch64_hash_table (info);
+ for (unsigned int i = 0; i < symtab_hdr->sh_info; i++)
+ {
+ bfd_vma off = locals[i].got_offset;
+ if (locals[i].got_refcount <= 0)
+ continue;
+ if ((locals[i].got_type & GOT_NORMAL) == 0)
+ continue;
+
+ /* FIXME: If the local symbol is in SHN_ABS then emitting
+ a relative relocation is not correct, but it seems to
+ be wrong in elfNN_aarch64_final_link_relocate too. */
+ if (!record_relr (htab, htab->root.sgot, off, htab->root.srelgot))
+ return false;
+ }
+ return true;
+}
+
+/* Follows the logic of elfNN_aarch64_relocate_section to decide which
+ relocations will become relative and possible to pack. Ignore
+ relocations against the GOT, those are handled separately per-symbol.
+ Undo the size accounting of the packed relocations and record them
+ so the relr section can be sized later. */
+
+static bool
+record_relr_non_got_relocs (bfd *input_bfd, struct bfd_link_info *info,
+ asection *sec)
+{
+ const Elf_Internal_Rela *relocs;
+ const Elf_Internal_Rela *rel;
+ const Elf_Internal_Rela *rel_end;
+ asection *sreloc;
+ struct elf_aarch64_link_hash_table *htab;
+ Elf_Internal_Shdr *symtab_hdr;
+ struct elf_link_hash_entry **sym_hashes;
+
+ if (sec->reloc_count == 0)
+ return true;
+ if ((sec->flags & (SEC_RELOC | SEC_ALLOC | SEC_DEBUGGING))
+ != (SEC_RELOC | SEC_ALLOC))
+ return true;
+ if (sec->alignment_power == 0)
+ return true;
+ sreloc = elf_section_data (sec)->sreloc;
+ if (sreloc == NULL)
+ return true;
+ htab = elf_aarch64_hash_table (info);
+ symtab_hdr = &elf_symtab_hdr (input_bfd);
+ sym_hashes = elf_sym_hashes (input_bfd);
+ relocs = _bfd_elf_link_info_read_relocs (input_bfd, info, sec, NULL, NULL,
+ info->keep_memory);
+ BFD_ASSERT (relocs != NULL);
+ rel_end = relocs + sec->reloc_count;
+ for (rel = relocs; rel < rel_end; rel++)
+ {
+ unsigned int r_symndx = ELFNN_R_SYM (rel->r_info);
+ unsigned int r_type = ELFNN_R_TYPE (rel->r_info);
+
+ bfd_reloc_code_real_type bfd_r_type
+ = elfNN_aarch64_bfd_reloc_from_type (input_bfd, r_type);
+ /* Handle relocs that can become R_AARCH64_RELATIVE,
+ but not ones against the GOT as those are handled
+ separately per-symbol. */
+ if (bfd_r_type != BFD_RELOC_AARCH64_NN)
+ continue;
+ /* Can only pack relocation against an aligned address. */
+ if (rel->r_offset % 2 != 0)
+ continue;
+
+ struct elf_link_hash_entry *h = NULL;
+ asection *def_sec = NULL;
+ bool resolved_to_zero = false;
+ if (r_symndx < symtab_hdr->sh_info)
+ {
+ /* A local symbol. */
+ Elf_Internal_Sym *isym;
+ isym = bfd_sym_from_r_symndx (&htab->root.sym_cache,
+ input_bfd, r_symndx);
+ BFD_ASSERT (isym != NULL);
+ if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
+ continue;
+ def_sec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
+ }
+ else
+ {
+ h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ /* Filter out symbols that cannot have a relative reloc. */
+ if (h->dyn_relocs == NULL)
+ continue;
+ if (bfd_is_abs_symbol (&h->root))
+ continue;
+ if (h->type == STT_GNU_IFUNC)
+ continue;
+
+ if (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ def_sec = h->root.u.def.section;
+ resolved_to_zero = UNDEFWEAK_NO_DYNAMIC_RELOC (info, h);
+ }
+ if (def_sec != NULL && discarded_section (def_sec))
+ continue;
+ /* Same logic as in elfNN_aarch64_final_link_relocate.
+ Except conditionals trimmed that cannot result a reltive reloc. */
+ if (bfd_link_pic (info)
+ && (h == NULL
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ && !resolved_to_zero)
+ || h->root.type != bfd_link_hash_undefweak))
+ {
+ if (h != NULL
+ && h->dynindx != -1
+ && (!(bfd_link_pie (info) || SYMBOLIC_BIND (info, h))
+ || !h->def_regular))
+ continue;
+ if (!record_relr (htab, sec, rel->r_offset, sreloc))
+ return false;
+ }
+ }
+ return true;
+}
+
+static int
+cmp_relr_addr (const void *p, const void *q)
+{
+ const bfd_vma *a = p;
+ const bfd_vma *b = q;
+ return *a < *b ? -1 : *a > *b ? 1 : 0;
+}
+
+/* Produce a malloc'd sorted array of reloc addresses in htab->relr_sorted.
+ Returns false on allocation failure. */
+
+static bool
+sort_relr (struct bfd_link_info *info,
+ struct elf_aarch64_link_hash_table *htab)
+{
+ if (htab->relr_count == 0)
+ return true;
+
+ bfd_vma *addr = htab->relr_sorted;
+ if (addr == NULL)
+ {
+ addr = bfd_malloc (htab->relr_count * sizeof (*addr));
+ if (addr == NULL)
+ return false;
+ htab->relr_sorted = addr;
+ }
+
+ for (bfd_size_type i = 0; i < htab->relr_count; i++)
+ {
+ bfd_vma off = _bfd_elf_section_offset (info->output_bfd, info,
+ htab->relr[i].sec,
+ htab->relr[i].off);
+ addr[i] = htab->relr[i].sec->output_section->vma
+ + htab->relr[i].sec->output_offset
+ + off;
+ }
+ qsort (addr, htab->relr_count, sizeof (*addr), cmp_relr_addr);
+ return true;
+}
+
+/* Size .relr.dyn whenever the layout changes, the number of packed
+ relocs are unchanged but the packed representation can. */
+
+bool
+elfNN_aarch64_size_relative_relocs (struct bfd_link_info *info,
+ bool *need_layout)
+{
+ struct elf_aarch64_link_hash_table *htab = elf_aarch64_hash_table (info);
+ asection *srelrdyn = htab->root.srelrdyn;
+ *need_layout = false;
+
+ if (!sort_relr (info, htab))
+ return false;
+ bfd_vma *addr = htab->relr_sorted;
+
+ BFD_ASSERT (srelrdyn != NULL);
+ bfd_size_type oldsize = srelrdyn->size;
+ srelrdyn->size = 0;
+ for (bfd_size_type i = 0; i < htab->relr_count; )
+ {
+ bfd_vma base = addr[i];
+ i++;
+ srelrdyn->size += 8;
+ base += 8;
+ for (;;)
+ {
+ bfd_size_type start_i = i;
+ while (i < htab->relr_count
+ && addr[i] - base < 63 * 8
+ && (addr[i] - base) % 8 == 0)
+ i++;
+ if (i == start_i)
+ break;
+ srelrdyn->size += 8;
+ base += 63 * 8;
+ }
+ }
+ if (srelrdyn->size != oldsize)
+ {
+ *need_layout = true;
+ /* Stop after a few iterations in case the layout does not converge,
+ we can do this when the size would shrink. */
+ if (htab->relr_layout_iter++ > 5 && srelrdyn->size < oldsize)
+ {
+ srelrdyn->size = oldsize;
+ *need_layout = false;
+ }
+ }
+ return true;
+}
+
+/* Emit the .relr.dyn section after it is sized and the layout is fixed. */
+
+bool
+elfNN_aarch64_finish_relative_relocs (struct bfd_link_info *info)
+{
+ struct elf_aarch64_link_hash_table *htab = elf_aarch64_hash_table (info);
+ asection *srelrdyn = htab->root.srelrdyn;
+ bfd *dynobj = htab->root.dynobj;
+
+ if (srelrdyn == NULL || srelrdyn->size == 0)
+ return true;
+ srelrdyn->contents = bfd_alloc (dynobj, srelrdyn->size);
+ if (srelrdyn->contents == NULL)
+ return false;
+ bfd_vma *addr = htab->relr_sorted;
+ bfd_byte *loc = srelrdyn->contents;
+ for (bfd_size_type i = 0; i < htab->relr_count; )
+ {
+ bfd_vma base = addr[i];
+ i++;
+ bfd_put_64 (dynobj, base, loc);
+ loc += 8;
+ base += 8;
+ for (;;)
+ {
+ bfd_vma bits = 0;
+ while (i < htab->relr_count)
+ {
+ bfd_vma delta = addr[i] - base;
+ if (delta >= 63 * 8 || delta % 8 != 0)
+ break;
+ bits |= (bfd_vma) 1 << (delta / 8);
+ i++;
+ }
+ if (bits == 0)
+ break;
+ bfd_put_64 (dynobj, (bits << 1) | 1, loc);
+ loc += 8;
+ base += 63 * 8;
+ }
+ }
+ free (addr);
+ htab->relr_sorted = NULL;
+ /* Pad any excess with 1's, a do-nothing encoding. */
+ while (loc < srelrdyn->contents + srelrdyn->size)
+ {
+ bfd_put_64 (dynobj, 1, loc);
+ loc += 8;
+ }
+ return true;
+}
+
/* This is the most important function of all . Innocuosly named
though ! */
@@ -9346,6 +9729,27 @@ elfNN_aarch64_size_dynamic_sections (bfd
}
}
+ /* Record the relative relocations that will be packed and undo the
+ size allocation for them in .rela.*. The size of .relr.dyn will be
+ computed later iteratively since it depends on the final layout. */
+ if (info->enable_dt_relr && !bfd_link_relocatable (info))
+ {
+ elf_link_hash_traverse (&htab->root, record_relr_dyn_got_relocs, info);
+
+ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
+ {
+ if (!is_aarch64_elf (ibfd))
+ continue;
+
+ for (s = ibfd->sections; s != NULL; s = s->next)
+ if (!record_relr_non_got_relocs (ibfd, info, s))
+ return false;
+
+ if (!record_relr_local_got_relocs (ibfd, info))
+ return false;
+ }
+ }
+
/* Init mapping symbols information to use later to distingush between
code and data while scanning for errata. */
if (htab->fix_erratum_835769 || htab->fix_erratum_843419)
@@ -9385,6 +9789,19 @@ elfNN_aarch64_size_dynamic_sections (bfd
if (s != htab->root.srelplt)
s->reloc_count = 0;
}
+ else if (s == htab->root.srelrdyn)
+ {
+ /* Remove .relr.dyn based on relr_count, not size, since
+ it is not sized yet. */
+ if (htab->relr_count == 0)
+ s->flags |= SEC_EXCLUDE;
+ else
+ /* Force dynamic tags for relocs even if there are no
+ .rela* relocs, required for setting DT_TEXTREL. */
+ relocs = true;
+ /* Allocate contents later. */
+ continue;
+ }
else
{
/* It's not one of our sections, so don't allocate space. */
@@ -9744,6 +10161,9 @@ elfNN_aarch64_finish_dynamic_symbol (bfd
return false;
BFD_ASSERT ((h->got.offset & 1) != 0);
+ /* Don't emit relative relocs if they are packed. */
+ if (info->enable_dt_relr)
+ goto skip_got_reloc;
rela.r_info = ELFNN_R_INFO (0, AARCH64_R (RELATIVE));
rela.r_addend = (h->root.u.def.value
+ h->root.u.def.section->output_section->vma
@@ -9763,6 +10183,7 @@ elfNN_aarch64_finish_dynamic_symbol (bfd
loc += htab->root.srelgot->reloc_count++ * RELOC_SIZE (htab);
bfd_elfNN_swap_reloca_out (output_bfd, &rela, loc);
}
+skip_got_reloc:
if (h->needs_copy)
{
@@ -10398,6 +10819,12 @@ const struct elf_size_info elfNN_aarch64
#define elf_backend_merge_gnu_properties \
elfNN_aarch64_merge_gnu_properties
+#define elf_backend_size_relative_relocs \
+ elfNN_aarch64_size_relative_relocs
+
+#define elf_backend_finish_relative_relocs \
+ elfNN_aarch64_finish_relative_relocs
+
#define elf_backend_can_refcount 1
#define elf_backend_can_gc_sections 1
#define elf_backend_plt_readonly 1
diff -rupN binutils,orig/bfd/elfxx-aarch64.h binutils-2.41/bfd/elfxx-aarch64.h
--- binutils,orig/bfd/elfxx-aarch64.h 2024-05-31 10:18:02.127948130 +0100
+++ binutils-2.41/bfd/elfxx-aarch64.h 2024-05-31 10:24:13.371523114 +0100
@@ -96,6 +96,17 @@ extern bool elf32_aarch64_size_stubs
extern bool elf32_aarch64_build_stubs
(struct bfd_link_info *);
+/* AArch64 relative relocation packing support for ELF64. */
+extern bool elf64_aarch64_size_relative_relocs
+ (struct bfd_link_info *, bool *);
+extern bool elf64_aarch64_finish_relative_relocs
+ (struct bfd_link_info *);
+/* AArch64 relative relocation packing support for ELF32. */
+extern bool elf32_aarch64_size_relative_relocs
+ (struct bfd_link_info *, bool *);
+extern bool elf32_aarch64_finish_relative_relocs
+ (struct bfd_link_info *);
+
/* Take the PAGE component of an address or offset. */
#define PG(x) ((x) & ~ (bfd_vma) 0xfff)
#define PG_OFFSET(x) ((x) & (bfd_vma) 0xfff)
diff -rupN binutils,orig/binutils/readelf.c binutils-2.41/binutils/readelf.c
--- binutils,orig/binutils/readelf.c 2024-05-31 10:18:02.711948969 +0100
+++ binutils-2.41/binutils/readelf.c 2024-05-31 10:39:08.921193160 +0100
@@ -332,6 +332,7 @@ typedef enum print_mode
PREFIX_HEX_5,
FULL_HEX,
LONG_HEX,
+ ZERO_HEX,
OCTAL,
OCTAL_5
}
@@ -569,6 +570,11 @@ print_vma (uint64_t vma, print_mode mode
return nc + printf ("%16.16" PRIx64, vma);
return nc + printf ("%8.8" PRIx64, vma);
+ case ZERO_HEX:
+ if (is_32bit_elf)
+ return printf ("%08" PRIx64, vma);
+ return printf ("%016" PRIx64, vma);
+
case DEC_5:
if (vma <= 99999)
return printf ("%5" PRId64, vma);
@@ -987,6 +993,26 @@ find_section_by_type (Filedata * filedat
return NULL;
}
+static Elf_Internal_Shdr *
+find_section_by_name (Filedata * filedata, const char * name)
+{
+ unsigned int i;
+
+ if (filedata->section_headers == NULL || filedata->string_table_length == 0)
+ return NULL;
+
+ for (i = 0; i < filedata->file_header.e_shnum; i++)
+ {
+ Elf_Internal_Shdr *sec = filedata->section_headers + i;
+
+ if (sec->sh_name < filedata->string_table_length
+ && streq (name, filedata->string_table + sec->sh_name))
+ return sec;
+ }
+
+ return NULL;
+}
+
/* Return a pointer to section NAME, or NULL if no such section exists,
restricted to the list of sections given in SET. */
@@ -1353,76 +1379,6 @@ slurp_rel_relocs (Filedata *filedata,
return true;
}
-static bool
-slurp_relr_relocs (Filedata *filedata,
- uint64_t relr_offset,
- uint64_t relr_size,
- uint64_t **relrsp,
- uint64_t *nrelrsp)
-{
- void *relrs;
- size_t size = 0, nentries, i;
- uint64_t base = 0, addr, entry;
-
- relrs = get_data (NULL, filedata, relr_offset, 1, relr_size,
- _("RELR relocation data"));
- if (!relrs)
- return false;
-
- if (is_32bit_elf)
- nentries = relr_size / sizeof (Elf32_External_Relr);
- else
- nentries = relr_size / sizeof (Elf64_External_Relr);
- for (i = 0; i < nentries; i++)
- {
- if (is_32bit_elf)
- entry = BYTE_GET (((Elf32_External_Relr *)relrs)[i].r_data);
- else
- entry = BYTE_GET (((Elf64_External_Relr *)relrs)[i].r_data);
- if ((entry & 1) == 0)
- size++;
- else
- while ((entry >>= 1) != 0)
- if ((entry & 1) == 1)
- size++;
- }
-
- *relrsp = malloc (size * sizeof (**relrsp));
- if (*relrsp == NULL)
- {
- free (relrs);
- error (_("out of memory parsing relocs\n"));
- return false;
- }
-
- size = 0;
- for (i = 0; i < nentries; i++)
- {
- const uint64_t entry_bytes = is_32bit_elf ? 4 : 8;
-
- if (is_32bit_elf)
- entry = BYTE_GET (((Elf32_External_Relr *)relrs)[i].r_data);
- else
- entry = BYTE_GET (((Elf64_External_Relr *)relrs)[i].r_data);
- if ((entry & 1) == 0)
- {
- (*relrsp)[size++] = entry;
- base = entry + entry_bytes;
- }
- else
- {
- for (addr = base; (entry >>= 1) != 0; addr += entry_bytes)
- if ((entry & 1) != 0)
- (*relrsp)[size++] = addr;
- base += entry_bytes * (entry_bytes * CHAR_BIT - 1);
- }
- }
-
- *nrelrsp = size;
- free (relrs);
- return true;
-}
-
/* Returns the reloc type extracted from the reloc info field. */
static unsigned int
@@ -1464,6 +1420,399 @@ uses_msp430x_relocs (Filedata * filedata
|| (filedata->file_header.e_ident[EI_OSABI] == ELFOSABI_NONE));
}
+static const char *
+get_symbol_at (Filedata * filedata,
+ Elf_Internal_Sym * symtab,
+ uint64_t nsyms,
+ char * strtab,
+ uint64_t where,
+ uint64_t * offset_return)
+{
+ Elf_Internal_Sym * beg = symtab;
+ Elf_Internal_Sym * end = symtab + nsyms;
+ Elf_Internal_Sym * best = NULL;
+ uint64_t dist = 0x100000;
+
+ /* FIXME: Since this function is likely to be called repeatedly with
+ slightly increasing addresses each time, we could speed things up by
+ caching the last returned value and starting our search from there. */
+ while (beg < end)
+ {
+ Elf_Internal_Sym * sym;
+ uint64_t value;
+
+ sym = beg + (end - beg) / 2;
+
+ value = sym->st_value;
+
+ if (where >= value
+ && where - value < dist)
+ {
+ best = sym;
+ dist = where - value;
+ if (dist == 0)
+ break;
+ }
+
+ if (where < value)
+ end = sym;
+ else
+ beg = sym + 1;
+ }
+
+ const char *name;
+
+ /* If there is a section start closer than the found symbol then
+ use that for symbolizing the address. */
+ Elf_Internal_Shdr *sec = find_section_by_address (filedata, where);
+ if (sec != NULL
+ && where - sec->sh_addr < dist
+ && section_name_valid (filedata, sec))
+ {
+ name = section_name (filedata, sec);
+ dist = where - sec->sh_addr;
+ }
+ else if (best != NULL)
+ name = strtab + best->st_name;
+ else
+ return NULL;
+
+ if (offset_return != NULL)
+ * offset_return = dist;
+
+ return name;
+}
+
+static void
+print_relr_addr_and_sym (Filedata * filedata,
+ Elf_Internal_Sym * symtab,
+ uint64_t nsyms,
+ char * strtab,
+ uint64_t where)
+{
+ const char * symname = NULL;
+ uint64_t offset = 0;
+
+ print_vma (where, ZERO_HEX);
+ printf (" ");
+
+ symname = get_symbol_at (filedata, symtab, nsyms, strtab, where, & offset);
+
+ if (symname == NULL)
+ printf ("<no sym>");
+ else if (offset == 0)
+ print_symbol (38, symname);
+ else
+ {
+ print_symbol (28, symname);
+ printf (" + ");
+ print_vma (offset, PREFIX_HEX);
+ }
+}
+
+/* See bfd_is_aarch64_special_symbol_name. */
+
+static bool
+is_aarch64_special_symbol_name (const char *name)
+{
+ if (!name || name[0] != '$')
+ return false;
+ if (name[1] == 'x' || name[1] == 'd')
+ /* Map. */;
+ else if (name[1] == 'm' || name[1] == 'f' || name[1] == 'p')
+ /* Tag. */;
+ else
+ return false;
+ return name[2] == 0 || name[2] == '.';
+}
+
+static bool
+is_special_symbol_name (Filedata * filedata, const char * s)
+{
+ switch (filedata->file_header.e_machine)
+ {
+ case EM_AARCH64:
+ return is_aarch64_special_symbol_name (s);
+
+ default:
+ return false;
+ }
+}
+
+/* Allows selecting the best symbol from a set for displaying addresses.
+ BEST is the current best or NULL if there are no good symbols yet.
+ SYM is the next symbol to consider, if it is better than BEST then
+ return SYM else return BEST. */
+
+static Elf_Internal_Sym *
+select_display_sym (Filedata * filedata,
+ char * strtab,
+ uint64_t strtablen,
+ Elf_Internal_Sym * best,
+ Elf_Internal_Sym * sym)
+{
+ /* Ignore empty or invalid syms. */
+ if (sym->st_name == 0)
+ return best;
+ if (sym->st_name >= strtablen)
+ return best;
+ /* Ignore undefined or TLS syms. */
+ if (sym->st_shndx == SHN_UNDEF)
+ return best;
+ if (ELF_ST_TYPE (sym->st_info) == STT_TLS)
+ return best;
+
+ char *s = strtab + sym->st_name;
+
+ /* Don't display special symbols. */
+ if (is_special_symbol_name (filedata, s))
+ return best;
+
+ /* Here SYM is good for display. */
+
+ if (best == NULL)
+ return sym;
+
+ char *sbest = strtab + best->st_name;
+
+ /* Prefer non-local symbols. */
+ if (ELF_ST_BIND (sym->st_info) == STB_LOCAL
+ && ELF_ST_BIND (best->st_info) != STB_LOCAL)
+ return best;
+ if (ELF_ST_BIND (sym->st_info) != STB_LOCAL
+ && ELF_ST_BIND (best->st_info) == STB_LOCAL)
+ return sym;
+
+ /* Select based on lexicographic order. */
+ return strcmp (s, sbest) < 0 ? sym : best;
+}
+
+/* Filter the sorted SYMTAB symbol array in-place to select at most one
+ symbol for an address and drop symbols that are not good to display.
+ Returns the new array length. */
+
+static uint64_t
+filter_display_syms (Filedata * filedata,
+ Elf_Internal_Sym * symtab,
+ uint64_t nsyms,
+ char * strtab,
+ uint64_t strtablen)
+{
+ Elf_Internal_Sym *r = symtab;
+ Elf_Internal_Sym *w = symtab;
+ Elf_Internal_Sym *best = NULL;
+ Elf_Internal_Sym *end = symtab + nsyms;
+ while (r < end)
+ {
+ /* Select the best symbol for an address. */
+ while (r < end
+ && (best == NULL || best->st_value == r->st_value))
+ {
+ best = select_display_sym (filedata, strtab, strtablen, best, r);
+ r++;
+ }
+ if (best != NULL)
+ {
+ *w = *best;
+ w++;
+ best = NULL;
+ }
+ }
+ return w - symtab;
+}
+
+static /* signed */ int
+symcmp (const void *p, const void *q)
+{
+ Elf_Internal_Sym *sp = (Elf_Internal_Sym *) p;
+ Elf_Internal_Sym *sq = (Elf_Internal_Sym *) q;
+
+ return sp->st_value > sq->st_value ? 1 : (sp->st_value < sq->st_value ? -1 : 0);
+}
+
+static uint64_t
+count_relr_relocations (Filedata * filedata,
+ Elf_Internal_Shdr * section)
+{
+ uint64_t * relrs;
+ uint64_t nentries;
+ uint64_t i;
+ uint64_t count;
+ int entsize;
+
+ if (section == NULL
+ || section->sh_type != SHT_RELR
+ || section->sh_size == 0)
+ return 0;
+
+ entsize = section->sh_entsize;
+ if (entsize == 0)
+ entsize = is_32bit_elf
+ ? sizeof (Elf32_External_Relr) : sizeof (Elf64_External_Relr);
+ else if (entsize != sizeof (Elf32_External_Relr)
+ && entsize != sizeof (Elf64_External_Relr))
+ return 0;
+
+ nentries = section->sh_size / entsize;
+ if (nentries == 0)
+ return 0;
+
+ /* FIXME: This call to get_data duplicates one that follows in
+ dump_relr_relocations(). They could be combined into just
+ one call. */
+ relrs = get_data (NULL, filedata, section->sh_offset, 1,
+ section->sh_size, _("RELR relocation data"));
+ if (relrs == NULL)
+ return 0;
+
+ for (count = i = 0; i < nentries; i++)
+ {
+ uint64_t entry;
+
+ if (entsize == sizeof (Elf32_External_Relr))
+ entry = BYTE_GET (((Elf32_External_Relr *)relrs)[i].r_data);
+ else
+ entry = BYTE_GET (((Elf64_External_Relr *)relrs)[i].r_data);
+
+ if ((entry & 1) == 0)
+ {
+ ++ count;
+ }
+ else
+ {
+ if (entry == 1)
+ continue;
+
+ for (; entry >>= 1;)
+ if ((entry & 1) == 1)
+ ++ count;
+ }
+ }
+
+ free (relrs);
+ return count;
+}
+
+static bool
+dump_relr_relocations (Filedata * filedata,
+ Elf_Internal_Shdr * section,
+ Elf_Internal_Sym * symtab,
+ uint64_t nsyms,
+ char * strtab,
+ uint64_t strtablen)
+{
+ uint64_t * relrs;
+ uint64_t nentries, i;
+ uint64_t relr_size = section->sh_size;
+ int relr_entsize = section->sh_entsize;
+ uint64_t relr_offset = section->sh_offset;
+ uint64_t where = 0;
+ int num_bits_in_entry;
+
+ if (relr_entsize == 0)
+ relr_entsize = is_32bit_elf
+ ? sizeof (Elf32_External_Relr) : sizeof (Elf64_External_Relr);
+
+ nentries = relr_size / relr_entsize;
+
+ if (nentries == 0)
+ return true;
+
+ if (relr_entsize == sizeof (Elf32_External_Relr))
+ num_bits_in_entry = 31;
+ else if (relr_entsize == sizeof (Elf64_External_Relr))
+ num_bits_in_entry = 63;
+ else
+ {
+ warn (_("Unexpected entsize for RELR section\n"));
+ return false;
+ }
+
+ relrs = get_data (NULL, filedata, relr_offset, 1, relr_size, _("RELR relocation data"));
+ if (relrs == NULL)
+ return false;
+
+ /* Paranoia. */
+ if (strtab == NULL)
+ strtablen = 0;
+ if (symtab == NULL)
+ nsyms = 0;
+
+ if (symtab != NULL)
+ {
+ /* Symbol tables are not sorted on address, but we want a quick lookup
+ for the symbol associated with each address computed below, so sort
+ the table then filter out unwanted entries. FIXME: This assumes that
+ the symbol table will not be used later on for some other purpose. */
+ qsort (symtab, nsyms, sizeof (Elf_Internal_Sym), symcmp);
+ nsyms = filter_display_syms (filedata, symtab, nsyms, strtab, strtablen);
+ }
+
+ if (relr_entsize == sizeof (Elf32_External_Relr))
+ printf (_ ("Index: Entry Address Symbolic Address\n"));
+ else
+ printf (_ ("Index: Entry Address Symbolic Address\n"));
+
+ for (i = 0; i < nentries; i++)
+ {
+ uint64_t entry;
+
+ if (relr_entsize == sizeof (Elf32_External_Relr))
+ entry = BYTE_GET (((Elf32_External_Relr *)relrs)[i].r_data);
+ else
+ entry = BYTE_GET (((Elf64_External_Relr *)relrs)[i].r_data);
+
+ /* We assume that there will never be more than 9999 entries. */
+ printf (_("%04u: "), (unsigned int) i);
+ print_vma (entry, ZERO_HEX);
+ printf (" ");
+
+ if ((entry & 1) == 0)
+ {
+ where = entry;
+ print_relr_addr_and_sym (filedata, symtab, nsyms, strtab, where);
+ printf ("\n");
+ where += relr_entsize;
+ }
+ else
+ {
+ bool first = true;
+ int j;
+
+ /* The least significant bit is ignored. */
+ if (entry == 1)
+ /* This can actually happen when the linker is allowed to shrink
+ RELR sections. For more details see: https://reviews.llvm.org/D67164. */
+ continue;
+ else if (i == 0)
+ warn (_("Unusual RELR bitmap - no previous entry to set the base address\n"));
+
+ for (j = 0; entry >>= 1; j++)
+ if ((entry & 1) == 1)
+ {
+ uint64_t addr = where + (j * relr_entsize);
+
+ if (first)
+ {
+ print_relr_addr_and_sym (filedata, symtab, nsyms, strtab, addr);
+ first = false;
+ }
+ else
+ {
+ printf (_("\n%*s "), relr_entsize == 4 ? 15 : 23, " ");
+ print_relr_addr_and_sym (filedata, symtab, nsyms, strtab, addr);
+ }
+ }
+
+ printf ("\n");
+ where += num_bits_in_entry * relr_entsize;
+ }
+ }
+
+ free (relrs);
+ return true;
+}
+
/* Display the contents of the relocation data found at the specified
offset. */
@@ -1497,21 +1846,8 @@ dump_relocations (Filedata *filedata,
}
else if (rel_type == reltype_relr)
{
- uint64_t * relrs;
- const char *format
- = is_32bit_elf ? "%08" PRIx64 "\n" : "%016" PRIx64 "\n";
-
- if (!slurp_relr_relocs (filedata, rel_offset, rel_size, &relrs,
- &rel_size))
- return false;
-
- printf (ngettext (" %" PRIu64 " offset\n",
- " %" PRIu64 " offsets\n", rel_size),
- rel_size);
- for (i = 0; i < rel_size; i++)
- printf (format, relrs[i]);
- free (relrs);
- return true;
+ /* This should have been handled by display_relocations(). */
+ return false;
}
if (is_32bit_elf)
@@ -2790,7 +3126,7 @@ get_machine_name (unsigned e_machine)
case EM_MMA: return "Fujitsu Multimedia Accelerator";
case EM_PCP: return "Siemens PCP";
case EM_NCPU: return "Sony nCPU embedded RISC processor";
- case EM_NDR1: return "Denso NDR1 microprocesspr";
+ case EM_NDR1: return "Denso NDR1 microprocessor";
case EM_STARCORE: return "Motorola Star*Core processor";
case EM_ME16: return "Toyota ME16 processor";
/* 60 */
@@ -8403,6 +8739,115 @@ static struct
{ "PLT", DT_JMPREL, DT_PLTRELSZ, reltype_unknown }
};
+static relocation_type
+rel_type_from_sh_type (unsigned int sh_type)
+{
+ switch (sh_type)
+ {
+ case SHT_RELA: return reltype_rela;
+ case SHT_REL: return reltype_rel;
+ case SHT_RELR: return reltype_relr;
+ default: return reltype_unknown;
+ }
+}
+
+static bool
+display_relocations (Elf_Internal_Shdr * section,
+ Filedata * filedata)
+{
+ relocation_type rel_type = rel_type_from_sh_type (section->sh_type);
+
+ if (rel_type == reltype_unknown)
+ return false;
+
+ uint64_t rel_size = section->sh_size;
+
+ if (rel_size == 0)
+ return false;
+
+ if (filedata->is_separate)
+ printf (_("\nIn linked file '%s' relocation section "),
+ filedata->file_name);
+ else
+ printf (_("\nRelocation section "));
+
+ if (filedata->string_table == NULL)
+ printf ("%d", section->sh_name);
+ else
+ printf ("'%s'", printable_section_name (filedata, section));
+
+ uint64_t num_rela = rel_size / section->sh_entsize;
+ uint64_t rel_offset = section->sh_offset;
+
+ if (rel_type == reltype_relr)
+ {
+ /* Just stating the 'number of entries' in a RELR section can be
+ misleading, since this is not the number of locations relocated, but
+ the number of words in the compressed RELR format. So also provide
+ the number of locations affected. */
+ if (num_rela == 1)
+ /* This is unlikely, but possible. */
+ printf (_(" at offset %#" PRIx64
+ " contains 1 entry which relocates 1 location:\n"),
+ rel_offset);
+ else
+ printf (_(" at offset %#" PRIx64 " contains %" PRIu64
+ " entries which relocate %" PRIu64 " locations:\n"),
+ rel_offset, num_rela, count_relr_relocations (filedata, section));
+ }
+ else
+ {
+ printf (ngettext (" at offset %#" PRIx64
+ " contains %" PRIu64 " entry:\n",
+ " at offset %#" PRIx64
+ " contains %" PRIu64 " entries:\n",
+ num_rela),
+ rel_offset, num_rela);
+ }
+
+ Elf_Internal_Shdr * symsec;
+ Elf_Internal_Sym * symtab = NULL;
+ uint64_t nsyms = 0;
+ uint64_t strtablen = 0;
+ char * strtab = NULL;
+
+ if (section->sh_link == 0
+ || section->sh_link >= filedata->file_header.e_shnum)
+ {
+ /* Symbol data not available.
+ This can happen, especially with RELR relocs.
+ See if there is a .symtab section present.
+ If so then use it. */
+ symsec = find_section_by_name (filedata, ".symtab");
+ }
+ else
+ {
+ symsec = filedata->section_headers + section->sh_link;
+
+ if (symsec->sh_type != SHT_SYMTAB
+ && symsec->sh_type != SHT_DYNSYM)
+ return false;
+ }
+
+ if (symsec != NULL
+ && !get_symtab (filedata, symsec, &symtab, &nsyms, &strtab, &strtablen))
+ return false;
+
+ bool res;
+
+ if (rel_type == reltype_relr)
+ res = dump_relr_relocations (filedata, section, symtab, nsyms, strtab, strtablen);
+ else
+ res = dump_relocations (filedata, rel_offset, rel_size,
+ symtab, nsyms, strtab, strtablen,
+ rel_type,
+ symsec == NULL ? false : symsec->sh_type == SHT_DYNSYM);
+ free (strtab);
+ free (symtab);
+
+ return res;
+}
+
/* Process the reloc section. */
static bool
@@ -8494,72 +8939,8 @@ process_relocs (Filedata * filedata)
i < filedata->file_header.e_shnum;
i++, section++)
{
- if ( section->sh_type != SHT_RELA
- && section->sh_type != SHT_REL
- && section->sh_type != SHT_RELR)
- continue;
-
- rel_offset = section->sh_offset;
- rel_size = section->sh_size;
-
- if (rel_size)
- {
- relocation_type rel_type;
- uint64_t num_rela;
-
- if (filedata->is_separate)
- printf (_("\nIn linked file '%s' relocation section "),
- filedata->file_name);
- else
- printf (_("\nRelocation section "));
-
- if (filedata->string_table == NULL)
- printf ("%d", section->sh_name);
- else
- printf ("'%s'", printable_section_name (filedata, section));
-
- num_rela = rel_size / section->sh_entsize;
- printf (ngettext (" at offset %#" PRIx64
- " contains %" PRIu64 " entry:\n",
- " at offset %#" PRIx64
- " contains %" PRId64 " entries:\n",
- num_rela),
- rel_offset, num_rela);
-
- rel_type = section->sh_type == SHT_RELA ? reltype_rela :
- section->sh_type == SHT_REL ? reltype_rel : reltype_relr;
-
- if (section->sh_link != 0
- && section->sh_link < filedata->file_header.e_shnum)
- {
- Elf_Internal_Shdr *symsec;
- Elf_Internal_Sym *symtab;
- uint64_t nsyms;
- uint64_t strtablen = 0;
- char *strtab = NULL;
-
- symsec = filedata->section_headers + section->sh_link;
- if (symsec->sh_type != SHT_SYMTAB
- && symsec->sh_type != SHT_DYNSYM)
- continue;
-
- if (!get_symtab (filedata, symsec,
- &symtab, &nsyms, &strtab, &strtablen))
- continue;
-
- dump_relocations (filedata, rel_offset, rel_size,
- symtab, nsyms, strtab, strtablen,
- rel_type,
- symsec->sh_type == SHT_DYNSYM);
- free (strtab);
- free (symtab);
- }
- else
- dump_relocations (filedata, rel_offset, rel_size,
- NULL, 0, NULL, 0, rel_type, false /* is_dynamic */);
-
- found = true;
- }
+ if (display_relocations (section, filedata))
+ found = true;
}
if (! found)
@@ -8664,15 +9045,6 @@ find_symbol_for_address (Filedata *filed
*offset = addr.offset;
}
-static /* signed */ int
-symcmp (const void *p, const void *q)
-{
- Elf_Internal_Sym *sp = (Elf_Internal_Sym *) p;
- Elf_Internal_Sym *sq = (Elf_Internal_Sym *) q;
-
- return sp->st_value > sq->st_value ? 1 : (sp->st_value < sq->st_value ? -1 : 0);
-}
-
/* Process the unwind section. */
#include "unwind-ia64.h"
diff -rupN binutils,orig/ld/emulparams/aarch64elf.sh binutils-2.41/ld/emulparams/aarch64elf.sh
--- binutils,orig/ld/emulparams/aarch64elf.sh 2024-05-31 10:18:04.488951522 +0100
+++ binutils-2.41/ld/emulparams/aarch64elf.sh 2024-05-31 10:24:13.371523114 +0100
@@ -1,3 +1,5 @@
+source_sh ${srcdir}/emulparams/dt-relr.sh
+
ARCH=aarch64
MACHINE=
NOP=0x1f2003d5
diff -rupN binutils,orig/ld/emulparams/aarch64fbsd.sh binutils-2.41/ld/emulparams/aarch64fbsd.sh
--- binutils,orig/ld/emulparams/aarch64fbsd.sh 2024-05-31 10:18:04.488951522 +0100
+++ binutils-2.41/ld/emulparams/aarch64fbsd.sh 2024-05-31 10:24:13.371523114 +0100
@@ -1,3 +1,5 @@
+source_sh ${srcdir}/emulparams/dt-relr.sh
+
ARCH=aarch64
MACHINE=
NOP=0x1f2003d5
diff -rupN binutils,orig/ld/emulparams/aarch64linux.sh binutils-2.41/ld/emulparams/aarch64linux.sh
--- binutils,orig/ld/emulparams/aarch64linux.sh 2024-05-31 10:18:04.488951522 +0100
+++ binutils-2.41/ld/emulparams/aarch64linux.sh 2024-05-31 10:24:13.372523116 +0100
@@ -1,3 +1,5 @@
+source_sh ${srcdir}/emulparams/dt-relr.sh
+
ARCH=aarch64
MACHINE=
NOP=0x1f2003d5
diff -rupN binutils,orig/ld/ldlex.c binutils-2.41/ld/ldlex.c
--- binutils,orig/ld/ldlex.c 2024-05-31 10:18:04.506951548 +0100
+++ binutils-2.41/ld/ldlex.c 2024-05-31 10:42:15.601508811 +0100
@@ -1,5 +1,5 @@
-#line 2 "ldlex.c"
+#line 2 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.c"
#define YY_INT_ALIGNED short int
@@ -1339,8 +1339,8 @@ int yy_flex_debug = 0;
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
-#line 1 "ldlex.l"
-#line 4 "ldlex.l"
+#line 1 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
+#line 4 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
/* Copyright (C) 1991-2023 Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support.
@@ -1427,9 +1427,9 @@ static void lex_warn_invalid (char *wher
*/
#define RTOKEN(x) { yylval.token = x; return x; }
-#line 1430 "ldlex.c"
+#line 1430 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.c"
-#line 1432 "ldlex.c"
+#line 1432 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.c"
#define INITIAL 0
#define SCRIPT 1
@@ -1652,10 +1652,10 @@ YY_DECL
}
{
-#line 114 "ldlex.l"
+#line 114 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
-#line 117 "ldlex.l"
+#line 117 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
if (parser_input != input_selected)
{
/* The first token of the input determines the initial parser state. */
@@ -1663,16 +1663,17 @@ YY_DECL
parser_input = input_selected;
switch (t)
{
- case input_script: return INPUT_SCRIPT; break;
- case input_mri_script: return INPUT_MRI_SCRIPT; break;
- case input_version_script: return INPUT_VERSION_SCRIPT; break;
- case input_dynamic_list: return INPUT_DYNAMIC_LIST; break;
- case input_defsym: return INPUT_DEFSYM; break;
+ case input_script: return INPUT_SCRIPT;
+ case input_mri_script: return INPUT_MRI_SCRIPT;
+ case input_version_script: return INPUT_VERSION_SCRIPT;
+ case input_section_ordering_script: return INPUT_SECTION_ORDERING_SCRIPT;
+ case input_dynamic_list: return INPUT_DYNAMIC_LIST;
+ case input_defsym: return INPUT_DEFSYM;
default: abort ();
}
}
-#line 1675 "ldlex.c"
+#line 1676 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.c"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -1731,13 +1732,13 @@ do_action: /* This label is used only to
case 1:
YY_RULE_SETUP
-#line 133 "ldlex.l"
+#line 134 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{
comment (); }
YY_BREAK
case 2:
YY_RULE_SETUP
-#line 136 "ldlex.l"
+#line 137 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{
yylval.integer = bfd_scan_vma (yytext + 1, 0, 16);
yylval.bigint.str = NULL;
@@ -1746,7 +1747,7 @@ YY_RULE_SETUP
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 142 "ldlex.l"
+#line 143 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{
int ibase ;
switch (yytext[yyleng - 1]) {
@@ -1775,7 +1776,7 @@ YY_RULE_SETUP
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 167 "ldlex.l"
+#line 168 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{
char *s = yytext;
int ibase = 0;
@@ -1831,849 +1832,849 @@ YY_RULE_SETUP
*/
case 5:
YY_RULE_SETUP
-#line 220 "ldlex.l"
+#line 221 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(']'); }
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 221 "ldlex.l"
+#line 222 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('['); }
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 222 "ldlex.l"
+#line 223 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(LSHIFTEQ); }
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 223 "ldlex.l"
+#line 224 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(RSHIFTEQ); }
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 224 "ldlex.l"
+#line 225 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(OROR); }
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 225 "ldlex.l"
+#line 226 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(EQ); }
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 226 "ldlex.l"
+#line 227 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(NE); }
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 227 "ldlex.l"
+#line 228 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(GE); }
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 228 "ldlex.l"
+#line 229 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(LE); }
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 229 "ldlex.l"
+#line 230 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(LSHIFT); }
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 230 "ldlex.l"
+#line 231 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(RSHIFT); }
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 231 "ldlex.l"
+#line 232 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(PLUSEQ); }
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 232 "ldlex.l"
+#line 233 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(MINUSEQ); }
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 233 "ldlex.l"
+#line 234 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(MULTEQ); }
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 234 "ldlex.l"
+#line 235 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(DIVEQ); }
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 235 "ldlex.l"
+#line 236 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ANDEQ); }
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 236 "ldlex.l"
+#line 237 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(OREQ); }
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 237 "ldlex.l"
+#line 238 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ANDAND); }
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 238 "ldlex.l"
+#line 239 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('>'); }
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 239 "ldlex.l"
+#line 240 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(','); }
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 240 "ldlex.l"
+#line 241 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('&'); }
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 241 "ldlex.l"
+#line 242 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('|'); }
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 242 "ldlex.l"
+#line 243 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('~'); }
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 243 "ldlex.l"
+#line 244 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('!'); }
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 244 "ldlex.l"
+#line 245 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('?'); }
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 245 "ldlex.l"
+#line 246 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('*'); }
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 246 "ldlex.l"
+#line 247 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('+'); }
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 247 "ldlex.l"
+#line 248 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('-'); }
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 248 "ldlex.l"
+#line 249 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('/'); }
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 249 "ldlex.l"
+#line 250 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('%'); }
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 250 "ldlex.l"
+#line 251 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('<'); }
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 251 "ldlex.l"
+#line 252 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('='); }
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 252 "ldlex.l"
+#line 253 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('}'); }
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 253 "ldlex.l"
+#line 254 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('{'); }
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 254 "ldlex.l"
+#line 255 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(')'); }
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 255 "ldlex.l"
+#line 256 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN('('); }
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 256 "ldlex.l"
+#line 257 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(':'); }
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 257 "ldlex.l"
+#line 258 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(';'); }
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 258 "ldlex.l"
+#line 259 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(MEMORY); }
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 259 "ldlex.l"
+#line 260 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(REGION_ALIAS); }
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 260 "ldlex.l"
+#line 261 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(LD_FEATURE); }
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 261 "ldlex.l"
+#line 262 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ORIGIN); }
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 262 "ldlex.l"
+#line 263 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(VERSIONK); }
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 263 "ldlex.l"
+#line 264 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(BLOCK); }
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 264 "ldlex.l"
+#line 265 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(BIND); }
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 265 "ldlex.l"
+#line 266 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(LENGTH); }
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 266 "ldlex.l"
+#line 267 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ALIGN_K); }
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 267 "ldlex.l"
+#line 268 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(DATA_SEGMENT_ALIGN); }
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 268 "ldlex.l"
+#line 269 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(DATA_SEGMENT_RELRO_END); }
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 269 "ldlex.l"
+#line 270 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(DATA_SEGMENT_END); }
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 270 "ldlex.l"
+#line 271 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ADDR); }
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 271 "ldlex.l"
+#line 272 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(LOADADDR); }
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 272 "ldlex.l"
+#line 273 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ALIGNOF); }
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 273 "ldlex.l"
+#line 274 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ABSOLUTE); }
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 274 "ldlex.l"
+#line 275 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(MAX_K); }
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 275 "ldlex.l"
+#line 276 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(MIN_K); }
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 276 "ldlex.l"
+#line 277 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(LOG2CEIL); }
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 277 "ldlex.l"
+#line 278 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ASSERT_K); }
YY_BREAK
case 63:
YY_RULE_SETUP
-#line 278 "ldlex.l"
+#line 279 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ENTRY); }
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 279 "ldlex.l"
+#line 280 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(EXTERN); }
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 280 "ldlex.l"
+#line 281 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(NEXT); }
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 281 "ldlex.l"
+#line 282 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SIZEOF_HEADERS); }
YY_BREAK
case 67:
YY_RULE_SETUP
-#line 282 "ldlex.l"
+#line 283 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SEGMENT_START); }
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 283 "ldlex.l"
+#line 284 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(MAP); }
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 284 "ldlex.l"
+#line 285 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SIZEOF); }
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 285 "ldlex.l"
+#line 286 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(TARGET_K); }
YY_BREAK
case 71:
YY_RULE_SETUP
-#line 286 "ldlex.l"
+#line 287 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SEARCH_DIR); }
YY_BREAK
case 72:
YY_RULE_SETUP
-#line 287 "ldlex.l"
+#line 288 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(OUTPUT); }
YY_BREAK
case 73:
YY_RULE_SETUP
-#line 288 "ldlex.l"
+#line 289 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(INPUT); }
YY_BREAK
case 74:
YY_RULE_SETUP
-#line 289 "ldlex.l"
+#line 290 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(GROUP); }
YY_BREAK
case 75:
YY_RULE_SETUP
-#line 290 "ldlex.l"
+#line 291 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(AS_NEEDED); }
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 291 "ldlex.l"
+#line 292 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(DEFINED); }
YY_BREAK
case 77:
YY_RULE_SETUP
-#line 292 "ldlex.l"
+#line 293 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(CREATE_OBJECT_SYMBOLS); }
YY_BREAK
case 78:
YY_RULE_SETUP
-#line 293 "ldlex.l"
+#line 294 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(CONSTRUCTORS); }
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 294 "ldlex.l"
+#line 295 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(FORCE_COMMON_ALLOCATION); }
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 295 "ldlex.l"
+#line 296 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(FORCE_GROUP_ALLOCATION); }
YY_BREAK
case 81:
YY_RULE_SETUP
-#line 296 "ldlex.l"
+#line 297 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(INHIBIT_COMMON_ALLOCATION); }
YY_BREAK
case 82:
YY_RULE_SETUP
-#line 297 "ldlex.l"
+#line 298 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SECTIONS); }
YY_BREAK
case 83:
YY_RULE_SETUP
-#line 298 "ldlex.l"
+#line 299 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(INSERT_K); }
YY_BREAK
case 84:
YY_RULE_SETUP
-#line 299 "ldlex.l"
+#line 300 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(AFTER); }
YY_BREAK
case 85:
YY_RULE_SETUP
-#line 300 "ldlex.l"
+#line 301 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(BEFORE); }
YY_BREAK
case 86:
YY_RULE_SETUP
-#line 301 "ldlex.l"
+#line 302 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(FILL); }
YY_BREAK
case 87:
YY_RULE_SETUP
-#line 302 "ldlex.l"
+#line 303 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(STARTUP); }
YY_BREAK
case 88:
YY_RULE_SETUP
-#line 303 "ldlex.l"
+#line 304 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(OUTPUT_FORMAT); }
YY_BREAK
case 89:
YY_RULE_SETUP
-#line 304 "ldlex.l"
+#line 305 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(OUTPUT_ARCH); }
YY_BREAK
case 90:
YY_RULE_SETUP
-#line 305 "ldlex.l"
+#line 306 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(HLL); }
YY_BREAK
case 91:
YY_RULE_SETUP
-#line 306 "ldlex.l"
+#line 307 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SYSLIB); }
YY_BREAK
case 92:
YY_RULE_SETUP
-#line 307 "ldlex.l"
+#line 308 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(FLOAT); }
YY_BREAK
case 93:
YY_RULE_SETUP
-#line 308 "ldlex.l"
+#line 309 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(QUAD); }
YY_BREAK
case 94:
YY_RULE_SETUP
-#line 309 "ldlex.l"
+#line 310 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SQUAD); }
YY_BREAK
case 95:
YY_RULE_SETUP
-#line 310 "ldlex.l"
+#line 311 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(LONG); }
YY_BREAK
case 96:
YY_RULE_SETUP
-#line 311 "ldlex.l"
+#line 312 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SHORT); }
YY_BREAK
case 97:
YY_RULE_SETUP
-#line 312 "ldlex.l"
+#line 313 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(BYTE); }
YY_BREAK
case 98:
YY_RULE_SETUP
-#line 313 "ldlex.l"
+#line 314 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ASCIZ); }
YY_BREAK
case 99:
YY_RULE_SETUP
-#line 314 "ldlex.l"
+#line 315 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(LINKER_VERSION); }
YY_BREAK
case 100:
YY_RULE_SETUP
-#line 315 "ldlex.l"
+#line 316 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(NOFLOAT); }
YY_BREAK
case 101:
YY_RULE_SETUP
-#line 316 "ldlex.l"
+#line 317 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(NOCROSSREFS); }
YY_BREAK
case 102:
YY_RULE_SETUP
-#line 317 "ldlex.l"
+#line 318 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(NOCROSSREFS_TO); }
YY_BREAK
case 103:
YY_RULE_SETUP
-#line 318 "ldlex.l"
+#line 319 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(OVERLAY); }
YY_BREAK
case 104:
YY_RULE_SETUP
-#line 319 "ldlex.l"
+#line 320 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SORT_BY_NAME); }
YY_BREAK
case 105:
YY_RULE_SETUP
-#line 320 "ldlex.l"
+#line 321 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SORT_BY_ALIGNMENT); }
YY_BREAK
case 106:
YY_RULE_SETUP
-#line 321 "ldlex.l"
+#line 322 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SORT_BY_NAME); }
YY_BREAK
case 107:
YY_RULE_SETUP
-#line 322 "ldlex.l"
+#line 323 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SORT_BY_INIT_PRIORITY); }
YY_BREAK
case 108:
YY_RULE_SETUP
-#line 323 "ldlex.l"
+#line 324 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SORT_NONE); }
YY_BREAK
case 109:
YY_RULE_SETUP
-#line 324 "ldlex.l"
+#line 325 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(NOLOAD); }
YY_BREAK
case 110:
YY_RULE_SETUP
-#line 325 "ldlex.l"
+#line 326 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(READONLY); }
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 326 "ldlex.l"
+#line 327 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(DSECT); }
YY_BREAK
case 112:
YY_RULE_SETUP
-#line 327 "ldlex.l"
+#line 328 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(COPY); }
YY_BREAK
case 113:
YY_RULE_SETUP
-#line 328 "ldlex.l"
+#line 329 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(INFO); }
YY_BREAK
case 114:
YY_RULE_SETUP
-#line 329 "ldlex.l"
+#line 330 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(TYPE); }
YY_BREAK
case 115:
YY_RULE_SETUP
-#line 330 "ldlex.l"
+#line 331 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ONLY_IF_RO); }
YY_BREAK
case 116:
YY_RULE_SETUP
-#line 331 "ldlex.l"
+#line 332 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ONLY_IF_RW); }
YY_BREAK
case 117:
YY_RULE_SETUP
-#line 332 "ldlex.l"
+#line 333 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SPECIAL); }
YY_BREAK
case 118:
YY_RULE_SETUP
-#line 333 "ldlex.l"
+#line 334 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ORIGIN); }
YY_BREAK
case 119:
YY_RULE_SETUP
-#line 334 "ldlex.l"
+#line 335 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ORIGIN); }
YY_BREAK
case 120:
YY_RULE_SETUP
-#line 335 "ldlex.l"
+#line 336 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(LENGTH); }
YY_BREAK
case 121:
YY_RULE_SETUP
-#line 336 "ldlex.l"
+#line 337 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(LENGTH); }
YY_BREAK
case 122:
YY_RULE_SETUP
-#line 337 "ldlex.l"
+#line 338 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(INPUT_SECTION_FLAGS); }
YY_BREAK
case 123:
YY_RULE_SETUP
-#line 338 "ldlex.l"
+#line 339 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(INCLUDE);}
YY_BREAK
case 124:
YY_RULE_SETUP
-#line 339 "ldlex.l"
+#line 340 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(PHDRS); }
YY_BREAK
case 125:
YY_RULE_SETUP
-#line 340 "ldlex.l"
+#line 341 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(AT);}
YY_BREAK
case 126:
YY_RULE_SETUP
-#line 341 "ldlex.l"
+#line 342 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ALIGN_WITH_INPUT);}
YY_BREAK
case 127:
YY_RULE_SETUP
-#line 342 "ldlex.l"
+#line 343 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SUBALIGN);}
YY_BREAK
case 128:
YY_RULE_SETUP
-#line 343 "ldlex.l"
+#line 344 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(HIDDEN); }
YY_BREAK
case 129:
YY_RULE_SETUP
-#line 344 "ldlex.l"
+#line 345 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(PROVIDE); }
YY_BREAK
case 130:
YY_RULE_SETUP
-#line 345 "ldlex.l"
+#line 346 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(PROVIDE_HIDDEN); }
YY_BREAK
case 131:
YY_RULE_SETUP
-#line 346 "ldlex.l"
+#line 347 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(KEEP); }
YY_BREAK
case 132:
YY_RULE_SETUP
-#line 347 "ldlex.l"
+#line 348 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(EXCLUDE_FILE); }
YY_BREAK
case 133:
YY_RULE_SETUP
-#line 348 "ldlex.l"
+#line 349 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(CONSTANT);}
YY_BREAK
case 134:
/* rule 134 can match eol */
YY_RULE_SETUP
-#line 350 "ldlex.l"
+#line 351 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ ++ lineno; }
YY_BREAK
case 135:
/* rule 135 can match eol */
YY_RULE_SETUP
-#line 351 "ldlex.l"
+#line 352 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ ++ lineno; RTOKEN(NEWLINE); }
YY_BREAK
case 136:
YY_RULE_SETUP
-#line 352 "ldlex.l"
+#line 353 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ /* Mri comment line */ }
YY_BREAK
case 137:
YY_RULE_SETUP
-#line 353 "ldlex.l"
+#line 354 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ /* Mri comment line */ }
YY_BREAK
case 138:
YY_RULE_SETUP
-#line 354 "ldlex.l"
+#line 355 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ENDWORD); }
YY_BREAK
case 139:
YY_RULE_SETUP
-#line 355 "ldlex.l"
+#line 356 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ABSOLUTE); }
YY_BREAK
case 140:
YY_RULE_SETUP
-#line 356 "ldlex.l"
+#line 357 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ALIGNMOD);}
YY_BREAK
case 141:
YY_RULE_SETUP
-#line 357 "ldlex.l"
+#line 358 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ALIGN_K);}
YY_BREAK
case 142:
YY_RULE_SETUP
-#line 358 "ldlex.l"
+#line 359 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(CHIP); }
YY_BREAK
case 143:
YY_RULE_SETUP
-#line 359 "ldlex.l"
+#line 360 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(BASE); }
YY_BREAK
case 144:
YY_RULE_SETUP
-#line 360 "ldlex.l"
+#line 361 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ALIAS); }
YY_BREAK
case 145:
YY_RULE_SETUP
-#line 361 "ldlex.l"
+#line 362 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(TRUNCATE); }
YY_BREAK
case 146:
YY_RULE_SETUP
-#line 362 "ldlex.l"
+#line 363 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(LOAD); }
YY_BREAK
case 147:
YY_RULE_SETUP
-#line 363 "ldlex.l"
+#line 364 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(PUBLIC); }
YY_BREAK
case 148:
YY_RULE_SETUP
-#line 364 "ldlex.l"
+#line 365 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ORDER); }
YY_BREAK
case 149:
YY_RULE_SETUP
-#line 365 "ldlex.l"
+#line 366 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(NAMEWORD); }
YY_BREAK
case 150:
YY_RULE_SETUP
-#line 366 "ldlex.l"
+#line 367 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(FORMAT); }
YY_BREAK
case 151:
YY_RULE_SETUP
-#line 367 "ldlex.l"
+#line 368 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(CASE); }
YY_BREAK
case 152:
YY_RULE_SETUP
-#line 368 "ldlex.l"
+#line 369 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(START); }
YY_BREAK
case 153:
YY_RULE_SETUP
-#line 369 "ldlex.l"
+#line 370 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(LIST); /* LIST and ignore to end of line */ }
YY_BREAK
case 154:
YY_RULE_SETUP
-#line 370 "ldlex.l"
+#line 371 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SECT); }
YY_BREAK
case 155:
YY_RULE_SETUP
-#line 371 "ldlex.l"
+#line 372 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ENDWORD); }
YY_BREAK
case 156:
YY_RULE_SETUP
-#line 372 "ldlex.l"
+#line 373 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ABSOLUTE); }
YY_BREAK
case 157:
YY_RULE_SETUP
-#line 373 "ldlex.l"
+#line 374 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ALIGNMOD);}
YY_BREAK
case 158:
YY_RULE_SETUP
-#line 374 "ldlex.l"
+#line 375 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ALIGN_K);}
YY_BREAK
case 159:
YY_RULE_SETUP
-#line 375 "ldlex.l"
+#line 376 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(CHIP); }
YY_BREAK
case 160:
YY_RULE_SETUP
-#line 376 "ldlex.l"
+#line 377 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(BASE); }
YY_BREAK
case 161:
YY_RULE_SETUP
-#line 377 "ldlex.l"
+#line 378 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ALIAS); }
YY_BREAK
case 162:
YY_RULE_SETUP
-#line 378 "ldlex.l"
+#line 379 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(TRUNCATE); }
YY_BREAK
case 163:
YY_RULE_SETUP
-#line 379 "ldlex.l"
+#line 380 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(LOAD); }
YY_BREAK
case 164:
YY_RULE_SETUP
-#line 380 "ldlex.l"
+#line 381 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(PUBLIC); }
YY_BREAK
case 165:
YY_RULE_SETUP
-#line 381 "ldlex.l"
+#line 382 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(ORDER); }
YY_BREAK
case 166:
YY_RULE_SETUP
-#line 382 "ldlex.l"
+#line 383 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(NAMEWORD); }
YY_BREAK
case 167:
YY_RULE_SETUP
-#line 383 "ldlex.l"
+#line 384 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(FORMAT); }
YY_BREAK
case 168:
YY_RULE_SETUP
-#line 384 "ldlex.l"
+#line 385 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(CASE); }
YY_BREAK
case 169:
YY_RULE_SETUP
-#line 385 "ldlex.l"
+#line 386 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(EXTERN); }
YY_BREAK
case 170:
YY_RULE_SETUP
-#line 386 "ldlex.l"
+#line 387 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(START); }
YY_BREAK
case 171:
YY_RULE_SETUP
-#line 387 "ldlex.l"
+#line 388 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(LIST); /* LIST and ignore to end of line */ }
YY_BREAK
case 172:
YY_RULE_SETUP
-#line 388 "ldlex.l"
+#line 389 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(SECT); }
YY_BREAK
case 173:
YY_RULE_SETUP
-#line 390 "ldlex.l"
+#line 391 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{
/* Filename without commas, needed to parse mri stuff */
yylval.name = xstrdup (yytext);
@@ -2682,7 +2683,7 @@ YY_RULE_SETUP
YY_BREAK
case 174:
YY_RULE_SETUP
-#line 397 "ldlex.l"
+#line 398 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{
yylval.name = xstrdup (yytext);
return NAME;
@@ -2690,7 +2691,7 @@ YY_RULE_SETUP
YY_BREAK
case 175:
YY_RULE_SETUP
-#line 401 "ldlex.l"
+#line 402 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{
/* Filename to be prefixed by --sysroot or when non-sysrooted, nothing. */
yylval.name = xstrdup (yytext);
@@ -2699,7 +2700,7 @@ YY_RULE_SETUP
YY_BREAK
case 176:
YY_RULE_SETUP
-#line 406 "ldlex.l"
+#line 407 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{
yylval.name = xstrdup (yytext + 2);
return LNAME;
@@ -2707,7 +2708,7 @@ YY_RULE_SETUP
YY_BREAK
case 177:
YY_RULE_SETUP
-#line 410 "ldlex.l"
+#line 411 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{
yylval.name = xstrdup (yytext);
return NAME;
@@ -2717,7 +2718,7 @@ YY_RULE_SETUP
section before /DISCARD/ interpreting the '/' as a divide. */
case 178:
YY_RULE_SETUP
-#line 416 "ldlex.l"
+#line 417 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{
yylval.name = xstrdup (yytext);
return NAME;
@@ -2725,7 +2726,7 @@ YY_RULE_SETUP
YY_BREAK
case 179:
YY_RULE_SETUP
-#line 420 "ldlex.l"
+#line 421 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{
/* Annoyingly, this pattern can match comments, and we have
longest match issues to consider. So if the first two
@@ -2746,7 +2747,7 @@ YY_RULE_SETUP
case 180:
/* rule 180 can match eol */
YY_RULE_SETUP
-#line 437 "ldlex.l"
+#line 438 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{
/* No matter the state, quotes give what's inside. */
yylval.name = xmemdup (yytext + 1, yyleng - 2, yyleng - 1);
@@ -2756,62 +2757,62 @@ YY_RULE_SETUP
case 181:
/* rule 181 can match eol */
YY_RULE_SETUP
-#line 443 "ldlex.l"
+#line 444 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{
lineno++; }
YY_BREAK
case 182:
YY_RULE_SETUP
-#line 445 "ldlex.l"
+#line 446 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{
/* Eat up whitespace */ }
YY_BREAK
case 183:
YY_RULE_SETUP
-#line 447 "ldlex.l"
+#line 448 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{
/* Eat up comments */ }
YY_BREAK
case 184:
YY_RULE_SETUP
-#line 450 "ldlex.l"
+#line 451 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ return *yytext; }
YY_BREAK
case 185:
YY_RULE_SETUP
-#line 452 "ldlex.l"
+#line 453 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(GLOBAL); }
YY_BREAK
case 186:
YY_RULE_SETUP
-#line 454 "ldlex.l"
+#line 455 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(LOCAL); }
YY_BREAK
case 187:
YY_RULE_SETUP
-#line 456 "ldlex.l"
+#line 457 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ RTOKEN(EXTERN); }
YY_BREAK
case 188:
YY_RULE_SETUP
-#line 458 "ldlex.l"
+#line 459 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ yylval.name = xstrdup (yytext);
return VERS_IDENTIFIER; }
YY_BREAK
case 189:
YY_RULE_SETUP
-#line 461 "ldlex.l"
+#line 462 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ yylval.name = xstrdup (yytext);
return VERS_TAG; }
YY_BREAK
case 190:
YY_RULE_SETUP
-#line 464 "ldlex.l"
+#line 465 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ BEGIN(VERS_SCRIPT); return *yytext; }
YY_BREAK
case 191:
YY_RULE_SETUP
-#line 466 "ldlex.l"
+#line 467 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ BEGIN(VERS_NODE);
vers_node_nesting = 0;
return *yytext;
@@ -2819,17 +2820,17 @@ YY_RULE_SETUP
YY_BREAK
case 192:
YY_RULE_SETUP
-#line 470 "ldlex.l"
+#line 471 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ return *yytext; }
YY_BREAK
case 193:
YY_RULE_SETUP
-#line 471 "ldlex.l"
+#line 472 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ vers_node_nesting++; return *yytext; }
YY_BREAK
case 194:
YY_RULE_SETUP
-#line 472 "ldlex.l"
+#line 473 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{ if (--vers_node_nesting < 0)
BEGIN(VERS_SCRIPT);
return *yytext;
@@ -2844,7 +2845,7 @@ case YY_STATE_EOF(WILD):
case YY_STATE_EOF(VERS_START):
case YY_STATE_EOF(VERS_SCRIPT):
case YY_STATE_EOF(VERS_NODE):
-#line 477 "ldlex.l"
+#line 478 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
{
include_stack_ptr--;
if (include_stack_ptr == 0)
@@ -2863,20 +2864,20 @@ case YY_STATE_EOF(VERS_NODE):
YY_BREAK
case 195:
YY_RULE_SETUP
-#line 493 "ldlex.l"
+#line 494 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
lex_warn_invalid (_(" in script"), yytext);
YY_BREAK
case 196:
YY_RULE_SETUP
-#line 494 "ldlex.l"
+#line 495 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
lex_warn_invalid (_(" in expression"), yytext);
YY_BREAK
case 197:
YY_RULE_SETUP
-#line 496 "ldlex.l"
+#line 497 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
ECHO;
YY_BREAK
-#line 2879 "ldlex.c"
+#line 2880 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.c"
case YY_END_OF_BUFFER:
{
@@ -3842,7 +3843,7 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 496 "ldlex.l"
+#line 497 "/work/sources/binutils/centos/fork/c10s/binutils-2.41/ld/ldlex.l"
diff -rupN binutils,orig/ld/testsuite/ld-aarch64/aarch64-elf.exp binutils-2.41/ld/testsuite/ld-aarch64/aarch64-elf.exp
--- binutils,orig/ld/testsuite/ld-aarch64/aarch64-elf.exp 2024-05-31 10:18:04.537951592 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/aarch64-elf.exp 2024-05-31 10:24:17.527529606 +0100
@@ -467,6 +467,14 @@ run_dump_test "bti-far-1"
run_dump_test "bti-far-2"
run_dump_test "bti-far-opt"
+run_dump_test_lp64 "relr-align"
+run_dump_test_lp64 "relr-data-pie"
+run_dump_test_lp64 "relr-data-shared"
+run_dump_test_lp64 "relr-got-pie"
+run_dump_test_lp64 "relr-got-shared"
+run_dump_test_lp64 "relr-text-pie"
+run_dump_test_lp64 "relr-text-shared"
+
if { ![skip_sframe_tests] } {
run_dump_test "sframe-simple-1"
}
diff -rupN binutils,orig/ld/testsuite/ld-aarch64/relr-align.d binutils-2.41/ld/testsuite/ld-aarch64/relr-align.d
--- binutils,orig/ld/testsuite/ld-aarch64/relr-align.d 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-align.d 2024-05-31 10:24:17.528529607 +0100
@@ -0,0 +1,22 @@
+#source: relr-align.s
+#ld: -shared -z pack-relative-relocs -T relocs.ld
+#readelf: -rW
+
+Relocation section '\.rela\.dyn' at offset 0x10090 contains 3 entries:
+ Offset Info Type Symbol's Value Symbol's Name \+ Addend
+0000000012340011 0000000000000403 R_AARCH64_RELATIVE 10000
+0000000012340019 0000000000000403 R_AARCH64_RELATIVE 10000
+0000000012340041 0000000000000403 R_AARCH64_RELATIVE 10000
+
+Relocation section '\.relr\.dyn' at offset 0x100d8 contains 9 entries which relocate 10 locations:
+Index: Entry Address Symbolic Address
+0000: 0000000012340000 0000000012340000 double_0
+0001: 0000000000000003 0000000012340008 double_0 \+ 0x8
+0002: 0000000012340022 0000000012340022 double_2
+0003: 0000000000000003 000000001234002a double_2 \+ 0x8
+0004: 0000000012340038 0000000012340038 single_0
+0005: 000000001234004a 000000001234004a single_2
+0006: 0000000012340058 0000000012340058 big
+0007: 8000000100000001 0000000012340158 big \+ 0x100
+ 0000000012340250 big \+ 0x1f8
+0008: 0000000000000003 0000000012340258 big \+ 0x200
diff -rupN binutils,orig/ld/testsuite/ld-aarch64/relr-align.s binutils-2.41/ld/testsuite/ld-aarch64/relr-align.s
--- binutils,orig/ld/testsuite/ld-aarch64/relr-align.s 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-align.s 2024-05-31 10:24:17.528529607 +0100
@@ -0,0 +1,106 @@
+// Test DT_RELR with differently aligned relative relocs.
+
+.text
+.global _start
+_start:
+foo:
+
+.data
+.p2align 3
+double_0:
+.xword foo
+.xword foo
+.byte 0
+double_1:
+.xword foo
+.xword foo
+.byte 0
+double_2:
+.xword foo
+.xword foo
+.byte 0
+.byte 0
+.byte 0
+.byte 0
+.byte 0
+.byte 0
+single_0:
+.xword foo
+.byte 0
+single_1:
+.xword foo
+.byte 0
+single_2:
+.xword foo
+.byte 0
+.byte 0
+.byte 0
+.byte 0
+.byte 0
+.byte 0
+big:
+.xword foo
+.xword 1
+.xword 2
+.xword 3
+.xword 4
+.xword 5
+.xword 6
+.xword 7
+.xword 8
+.xword 9
+.xword 10
+.xword 11
+.xword 12
+.xword 13
+.xword 14
+.xword 15
+.xword 16
+.xword 17
+.xword 18
+.xword 19
+.xword 20
+.xword 21
+.xword 22
+.xword 23
+.xword 24
+.xword 25
+.xword 26
+.xword 27
+.xword 28
+.xword 29
+.xword 30
+.xword 31
+.xword foo + 32
+.xword 33
+.xword 34
+.xword 35
+.xword 36
+.xword 37
+.xword 38
+.xword 39
+.xword 40
+.xword 41
+.xword 42
+.xword 43
+.xword 44
+.xword 45
+.xword 46
+.xword 47
+.xword 48
+.xword 49
+.xword 50
+.xword 51
+.xword 52
+.xword 53
+.xword 54
+.xword 55
+.xword 56
+.xword 57
+.xword 58
+.xword 59
+.xword 60
+.xword 61
+.xword 62
+.xword foo + 63
+.xword foo + 64
diff -rupN binutils,orig/ld/testsuite/ld-aarch64/relr-data-pie.d binutils-2.41/ld/testsuite/ld-aarch64/relr-data-pie.d
--- binutils,orig/ld/testsuite/ld-aarch64/relr-data-pie.d 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-data-pie.d 2024-05-31 10:24:17.528529607 +0100
@@ -0,0 +1,18 @@
+#source: relr-data.s
+#ld: -pie -z pack-relative-relocs -T relocs.ld
+#readelf: -rW
+
+Relocation section '\.rela\.dyn' at offset 0x1.* contains 5 entries:
+ Offset Info Type Symbol's Value Symbol's Name \+ Addend
+0000000012340000 0000000000000403 R_AARCH64_RELATIVE 10004
+0000000012340008 0000000000000403 R_AARCH64_RELATIVE 10008
+0000000012340010 0000000000000403 R_AARCH64_RELATIVE 1000c
+0000000012340018 0000000000000403 R_AARCH64_RELATIVE 12340050
+0000000012340040 0000000300000101 R_AARCH64_ABS64 0000000000000000 sym_weak_undef \+ 0
+
+Relocation section '\.relr\.dyn' at offset 0x1.* contains 2 entries which relocate 4 locations:
+Index: Entry Address Symbolic Address
+0000: 0000000012340020 0000000012340020 aligned_local
+0001: 0000000000000027 0000000012340028 aligned_hidden
+ 0000000012340030 aligned_global
+ 0000000012340048 aligned_DYNAMIC
diff -rupN binutils,orig/ld/testsuite/ld-aarch64/relr-data-shared.d binutils-2.41/ld/testsuite/ld-aarch64/relr-data-shared.d
--- binutils,orig/ld/testsuite/ld-aarch64/relr-data-shared.d 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-data-shared.d 2024-05-31 10:24:17.529529609 +0100
@@ -0,0 +1,18 @@
+#source: relr-data.s
+#ld: -shared -z pack-relative-relocs -T relocs.ld
+#readelf: -rW
+
+Relocation section '\.rela\.dyn' at offset 0x10150 contains 6 entries:
+ Offset Info Type Symbol's Value Symbol's Name \+ Addend
+0000000012340000 0000000000000403 R_AARCH64_RELATIVE 10004
+0000000012340008 0000000000000403 R_AARCH64_RELATIVE 10008
+0000000012340018 0000000000000403 R_AARCH64_RELATIVE 12340050
+0000000012340010 0000000400000101 R_AARCH64_ABS64 000000000001000c sym_global \+ 0
+0000000012340030 0000000400000101 R_AARCH64_ABS64 000000000001000c sym_global \+ 0
+0000000012340040 0000000300000101 R_AARCH64_ABS64 0000000000000000 sym_weak_undef \+ 0
+
+Relocation section '\.relr\.dyn' at offset 0x101e0 contains 2 entries which relocate 3 locations:
+Index: Entry Address Symbolic Address
+0000: 0000000012340020 0000000012340020 aligned_local
+0001: 0000000000000023 0000000012340028 aligned_hidden
+ 0000000012340048 aligned_DYNAMIC
diff -rupN binutils,orig/ld/testsuite/ld-aarch64/relr-data.s binutils-2.41/ld/testsuite/ld-aarch64/relr-data.s
--- binutils,orig/ld/testsuite/ld-aarch64/relr-data.s 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-data.s 2024-05-31 10:24:17.529529609 +0100
@@ -0,0 +1,71 @@
+// Test symbol references in .data when used with DT_RELR.
+// Relocations for unaligned sections are currently not packed.
+
+.text
+.global _start
+_start:
+ nop
+
+sym_local:
+ nop
+
+.global sym_hidden
+.hidden sym_hidden
+sym_hidden:
+ nop
+
+.global sym_global
+sym_global:
+ nop
+
+.global sym_global_abs
+.set sym_global_abs, 42
+
+.global sym_weak_undef
+.weak sym_weak_undef
+
+.section .data.unaligned_local
+unaligned_local:
+.xword sym_local
+
+.section .data.unaligned_hidden
+unaligned_hidden:
+.xword sym_hidden
+
+.section .data.unaligned_global
+unaligned_global:
+.xword sym_global
+
+.section .data.unaligned_DYNAMIC
+unaligned_DYNAMIC:
+.xword _DYNAMIC
+
+.section .data.aligned_local
+.p2align 1
+aligned_local:
+.xword sym_local
+
+.section .data.aligned_hidden
+.p2align 1
+aligned_hidden:
+.xword sym_hidden
+
+.section .data.aligned_global
+.p2align 1
+aligned_global:
+.xword sym_global
+
+.section .data.aligned_global_abs
+.p2align 1
+aligned_global_abs:
+.xword sym_global_abs
+
+.section .data.aligned_weak_undef
+.p2align 1
+aligned_weak_undef:
+.xword sym_weak_undef
+
+.section .data.aligned_DYNAMIC
+.p2align 1
+aligned_DYNAMIC:
+.xword _DYNAMIC
diff -rupN binutils,orig/ld/testsuite/ld-aarch64/relr-got-pie.d binutils-2.41/ld/testsuite/ld-aarch64/relr-got-pie.d
--- binutils,orig/ld/testsuite/ld-aarch64/relr-got-pie.d 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-got-pie.d 2024-05-31 10:24:17.529529609 +0100
@@ -0,0 +1,15 @@
+#source: relr-got.s
+#ld: -pie -z pack-relative-relocs -T relocs.ld
+#readelf: -rW
+
+Relocation section '\.rela\.dyn' at offset 0x1.* contains 2 entries:
+ Offset Info Type Symbol's Value Symbol's Name \+ Addend
+0000000000000000 0000000000000000 R_AARCH64_NONE 0
+0000000000020030 0000000200000401 R_AARCH64_GLOB_DAT 0000000000000000 sym_weak_undef \+ 0
+
+Relocation section '\.relr\.dyn' at offset 0x1.* contains 2 entries which relocate 4 locations:
+Index: Entry Address Symbolic Address
+0000: 0000000000020008 0000000000020008 _GLOBAL_OFFSET_TABLE_ \+ 0x8
+0001: 000000000000000f 0000000000020010 _GLOBAL_OFFSET_TABLE_ \+ 0x10
+ 0000000000020018 _GLOBAL_OFFSET_TABLE_ \+ 0x18
+ 0000000000020020 _GLOBAL_OFFSET_TABLE_ \+ 0x20
diff -rupN binutils,orig/ld/testsuite/ld-aarch64/relr-got-shared.d binutils-2.41/ld/testsuite/ld-aarch64/relr-got-shared.d
--- binutils,orig/ld/testsuite/ld-aarch64/relr-got-shared.d 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-got-shared.d 2024-05-31 10:24:17.529529609 +0100
@@ -0,0 +1,15 @@
+#source: relr-got.s
+#ld: -shared -z pack-relative-relocs -T relocs.ld
+#readelf: -rW
+
+Relocation section '\.rela\.dyn' at offset 0x10168 contains 3 entries:
+ Offset Info Type Symbol's Value Symbol's Name \+ Addend
+0000000000020020 0000000300000401 R_AARCH64_GLOB_DAT 0000000000010038 sym_global \+ 0
+0000000000020028 0000000500000401 R_AARCH64_GLOB_DAT 000000000000002a sym_global_abs \+ 0
+0000000000020030 0000000200000401 R_AARCH64_GLOB_DAT 0000000000000000 sym_weak_undef \+ 0
+
+Relocation section '\.relr\.dyn' at offset 0x101b0 contains 2 entries which relocate 3 locations:
+Index: Entry Address Symbolic Address
+0000: 0000000000020008 0000000000020008 _GLOBAL_OFFSET_TABLE_ \+ 0x8
+0001: 0000000000000007 0000000000020010 _GLOBAL_OFFSET_TABLE_ \+ 0x10
+ 0000000000020018 _GLOBAL_OFFSET_TABLE_ \+ 0x18
diff -rupN binutils,orig/ld/testsuite/ld-aarch64/relr-got.s binutils-2.41/ld/testsuite/ld-aarch64/relr-got.s
--- binutils,orig/ld/testsuite/ld-aarch64/relr-got.s 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-got.s 2024-05-31 10:24:17.529529609 +0100
@@ -0,0 +1,40 @@
+// Test GOT relocations with DT_RELR.
+
+.text
+.global _start
+_start:
+ adrp x0, :got:sym_local
+ ldr x0, [x0, :got_lo12:sym_local]
+
+ adrp x0, :got:sym_hidden
+ ldr x0, [x0, :got_lo12:sym_hidden]
+
+ adrp x0, :got:sym_global
+ ldr x0, [x0, :got_lo12:sym_global]
+
+ adrp x0, :got:sym_global
+ ldr x0, [x0, :got_lo12:sym_global_abs]
+
+ adrp x0, :got:sym_weak_undef
+ ldr x0, [x0, :got_lo12:sym_weak_undef]
+
+ adrp x0, :got:_DYNAMIC
+ ldr x0, [x0, :got_lo12:_DYNAMIC]
+
+sym_local:
+ nop
+
+.global sym_hidden
+.hidden sym_hidden
+sym_hidden:
+ nop
+
+.global sym_global
+sym_global:
+ nop
+
+.global sym_global_abs
+.set sym_global_abs, 42
+
+.global sym_weak_undef
+.weak sym_weak_undef
diff -rupN binutils,orig/ld/testsuite/ld-aarch64/relr-text-pie.d binutils-2.41/ld/testsuite/ld-aarch64/relr-text-pie.d
--- binutils,orig/ld/testsuite/ld-aarch64/relr-text-pie.d 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-text-pie.d 2024-05-31 10:24:17.529529609 +0100
@@ -0,0 +1,14 @@
+#source: relr-text.s
+#ld: -pie -z pack-relative-relocs -T relocs.ld
+#readelf: -drW
+
+#...
+ 0x0000000000000016 \(TEXTREL\) 0x0
+#...
+ 0x0000000000000024 \(RELR\) 0x1.*
+ 0x0000000000000023 \(RELRSZ\) 8 \(bytes\)
+ 0x0000000000000025 \(RELRENT\) 8 \(bytes\)
+#...
+Relocation section '\.relr\.dyn' at offset 0x1.* contains 1 entry which relocates 1 location:
+Index: Entry Address Symbolic Address
+0000: 0000000000010000 0000000000010000 _start
diff -rupN binutils,orig/ld/testsuite/ld-aarch64/relr-text-shared.d binutils-2.41/ld/testsuite/ld-aarch64/relr-text-shared.d
--- binutils,orig/ld/testsuite/ld-aarch64/relr-text-shared.d 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-text-shared.d 2024-05-31 10:24:17.529529609 +0100
@@ -0,0 +1,14 @@
+#source: relr-text.s
+#ld: -shared -z pack-relative-relocs -T relocs.ld
+#readelf: -drW
+
+#...
+ 0x0000000000000016 \(TEXTREL\) 0x0
+#...
+ 0x0000000000000024 \(RELR\) 0x10098
+ 0x0000000000000023 \(RELRSZ\) 8 \(bytes\)
+ 0x0000000000000025 \(RELRENT\) 8 \(bytes\)
+#...
+Relocation section '.relr.dyn' at offset 0x10098 contains 1 entry which relocates 1 location:
+Index: Entry Address Symbolic Address
+0000: 0000000000010000 0000000000010000 _start
diff -rupN binutils,orig/ld/testsuite/ld-aarch64/relr-text.s binutils-2.41/ld/testsuite/ld-aarch64/relr-text.s
--- binutils,orig/ld/testsuite/ld-aarch64/relr-text.s 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-text.s 2024-05-31 10:24:17.529529609 +0100
@@ -0,0 +1,10 @@
+// Test DT_RELR with DT_TEXTREL.
+
+.text
+.p2align 3
+.global _start
+_start:
+.global foo
+.hidden foo
+foo:
+.xword foo
diff -rupN binutils,orig/ld/testsuite/ld-elf/dt-relr-2b.d binutils-2.41/ld/testsuite/ld-elf/dt-relr-2b.d
--- binutils,orig/ld/testsuite/ld-elf/dt-relr-2b.d 2024-05-31 10:18:04.595951676 +0100
+++ binutils-2.41/ld/testsuite/ld-elf/dt-relr-2b.d 2024-05-31 10:47:05.480989983 +0100
@@ -12,6 +12,10 @@ Relocation section '\.rel(a|)\.dyn' at o
#...
[0-9a-f]+ +[0-9a-f]+ +R_.*_(RELATIVE|UADDR.*) .*
#...
-Relocation section '\.relr\.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
- 4 offsets
+Relocation section '\.relr\.dyn' at offset 0x[0-9a-f]+ contains 2 entries which relocate [0-9]+ locations:
+#...
+0000: +[0-9a-f]+ [0-9a-f]+ +data
+0001: +[0-9a-f]+ [0-9a-f]+ +data \+ 0x[0-9a-f]+
+ +[0-9a-f]+ +data \+ 0x[0-9a-f]+
+ +[0-9a-f]+ +data \+ 0x[0-9a-f]+
#pass
diff -rupN binutils,orig/ld/testsuite/ld-elf/dt-relr-2c.d binutils-2.41/ld/testsuite/ld-elf/dt-relr-2c.d
--- binutils,orig/ld/testsuite/ld-elf/dt-relr-2c.d 2024-05-31 10:18:04.595951676 +0100
+++ binutils-2.41/ld/testsuite/ld-elf/dt-relr-2c.d 2024-05-31 10:48:54.367169332 +0100
@@ -12,6 +12,9 @@ Relocation section '\.rel(a|)\.dyn' at o
#...
[0-9a-f]+ +[0-9a-f]+ +R_.*_(RELATIVE|UADDR.*) .*
#...
-Relocation section '\.relr\.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
- 3 offsets
+Relocation section '\.relr\.dyn' at offset 0x[0-9a-f]+ contains 2 entries which relocate [0-9]+ locations:
+#...
+0000: +[0-9a-f]+ [0-9a-f]+ +.*
+0001: +[0-9a-f]+ [0-9a-f]+ +.*
+ +[0-9a-f]+ +.*
#pass
diff -rupN binutils,orig/ld/testsuite/ld-elf/dt-relr-2d.d binutils-2.41/ld/testsuite/ld-elf/dt-relr-2d.d
--- binutils,orig/ld/testsuite/ld-elf/dt-relr-2d.d 2024-05-31 10:18:04.595951676 +0100
+++ binutils-2.41/ld/testsuite/ld-elf/dt-relr-2d.d 2024-05-31 10:49:24.208217983 +0100
@@ -12,6 +12,11 @@ Relocation section '\.rel(a|)\.dyn' at o
#...
[0-9a-f]+ +[0-9a-f]+ +R_.*_(RELATIVE|UADDR.*) .*
#...
-Relocation section '\.relr\.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
- 4 offsets
+Relocation section '\.relr\.dyn' at offset 0x[0-9a-f]+ contains 2 entries which relocate [0-9]+ locations:
+#...
+0000: +[0-9a-f]+ [0-9a-f]+ +data
+0001: +[0-9a-f]+ [0-9a-f]+ +data \+ 0x[0-9a-f]+
+ +[0-9a-f]+ +data \+ 0x[0-9a-f]+
+ +[0-9a-f]+ +data \+ 0x[0-9a-f]+
#pass
+
diff -rupN binutils,orig/ld/testsuite/ld-elf/dt-relr-2e.d binutils-2.41/ld/testsuite/ld-elf/dt-relr-2e.d
--- binutils,orig/ld/testsuite/ld-elf/dt-relr-2e.d 2024-05-31 10:18:04.595951676 +0100
+++ binutils-2.41/ld/testsuite/ld-elf/dt-relr-2e.d 2024-05-31 10:49:50.783261306 +0100
@@ -12,6 +12,10 @@ Relocation section '\.rel(a|)\.data' at
#...
[0-9a-f]+ +[0-9a-f]+ +R_.*_(RELATIVE|UADDR.*) .*
#...
-Relocation section '\.relr\.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
- 4 offsets
+Relocation section '\.relr\.dyn' at offset 0x[0-9a-f]+ contains 2 entries which relocate [0-9]+ locations:
+#...
+0000: +[0-9a-f]+ [0-9a-f]+ +data
+0001: +[0-9a-f]+ [0-9a-f]+ +data \+ 0x[0-9a-f]+
+ +[0-9a-f]+ +data \+ 0x[0-9a-f]+
+ +[0-9a-f]+ +data \+ 0x[0-9a-f]+
#pass
diff -rupN binutils,orig/ld/testsuite/ld-elf/dt-relr-2i.d binutils-2.41/ld/testsuite/ld-elf/dt-relr-2i.d
--- binutils,orig/ld/testsuite/ld-elf/dt-relr-2i.d 2024-05-31 10:18:04.595951676 +0100
+++ binutils-2.41/ld/testsuite/ld-elf/dt-relr-2i.d 2024-05-31 10:50:16.624303428 +0100
@@ -12,6 +12,10 @@ Relocation section '\.rel(a|)\.dyn' at o
#...
[0-9a-f]+ +[0-9a-f]+ +R_.*_(RELATIVE|UADDR.*) .*
#...
-Relocation section '\.relr\.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
- 4 offsets
+Relocation section '\.relr\.dyn' at offset 0x[0-9a-f]+ contains 2 entries which relocate [0-9]+ locations:
+#...
+0000: +[0-9a-f]+ [0-9a-f]+ +data
+0001: +[0-9a-f]+ [0-9a-f]+ +data \+ 0x[0-9a-f]+
+ +[0-9a-f]+ +data \+ 0x[0-9a-f]+
+ +[0-9a-f]+ +data \+ 0x[0-9a-f]+
#pass
diff -rupN binutils,orig/ld/testsuite/ld-i386/dt-relr-1a.d binutils-2.41/ld/testsuite/ld-i386/dt-relr-1a.d
--- binutils,orig/ld/testsuite/ld-i386/dt-relr-1a.d 2024-05-31 10:18:04.635951733 +0100
+++ binutils-2.41/ld/testsuite/ld-i386/dt-relr-1a.d 2024-05-31 10:51:43.768445485 +0100
@@ -13,12 +13,11 @@ Relocation section '\.rel\.plt' at offse
+Offset +Info +Type +Sym. Value +Symbol's Name
[0-9a-f]+ +[0-9a-f]+ +R_386_JUMP_SLOT +0+ +func1
-Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries:
- +3 offsets
-[a-f0-9]+
-[a-f0-9]+
-[a-f0-9]+
-
+Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries which relocate [0-9]+ locations:
+#...
+0000: +[0-9a-f]+ [0-9a-f]+ +.*
+0001: +[0-9a-f]+ [0-9a-f]+ +.*
+ +[0-9a-f]+ +.*
#...
Symbol table '.symtab' contains [0-9]+ entries:
Num: Value Size Type Bind Vis Ndx Name
diff -rupN binutils,orig/ld/testsuite/ld-i386/dt-relr-1b.d binutils-2.41/ld/testsuite/ld-i386/dt-relr-1b.d
--- binutils,orig/ld/testsuite/ld-i386/dt-relr-1b.d 2024-05-31 10:18:04.635951733 +0100
+++ binutils-2.41/ld/testsuite/ld-i386/dt-relr-1b.d 2024-05-31 10:52:16.055498118 +0100
@@ -16,12 +16,11 @@ Relocation section '\.rel\.plt' at offse
+Offset +Info +Type +Sym. Value +Symbol's Name
[0-9a-f]+ +[0-9a-f]+ +R_386_JUMP_SLOT +0+ +func1
-Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries:
- +3 offsets
-[a-f0-9]+
-[a-f0-9]+
-[a-f0-9]+
-
+Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries which relocate [0-9]+ locations:
+#...
+0000: +[0-9a-f]+ [0-9a-f]+ +.*
+0001: +[0-9a-f]+ [0-9a-f]+ +.*
+ +[0-9a-f]+ +.*
#...
Symbol table '.symtab' contains [0-9]+ entries:
Num: Value Size Type Bind Vis Ndx Name
diff -rupN binutils,orig/ld/testsuite/ld-powerpc/abs-pie-relr.r binutils-2.41/ld/testsuite/ld-powerpc/abs-pie-relr.r
--- binutils,orig/ld/testsuite/ld-powerpc/abs-pie-relr.r 2024-05-31 10:18:04.721951857 +0100
+++ binutils-2.41/ld/testsuite/ld-powerpc/abs-pie-relr.r 2024-05-31 10:52:57.544565350 +0100
@@ -3,6 +3,7 @@
#ld: -melf64ppc -pie --hash-style=sysv -z pack-relative-relocs --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0
#readelf: -rW
-Relocation section '\.relr\.dyn' at offset .* contains 1 entry:
- 1 offset
-0+10338
+Relocation section '\.relr\.dyn' at offset .* contains 1 entry which relocates 1 location:
+Index: Entry Address Symbolic Address
+0000: +[0-9a-f]+ [0-9a-f]+ +x
+
diff -rupN binutils,orig/ld/testsuite/ld-powerpc/abs-shared-relr.r binutils-2.41/ld/testsuite/ld-powerpc/abs-shared-relr.r
--- binutils,orig/ld/testsuite/ld-powerpc/abs-shared-relr.r 2024-05-31 10:18:04.721951857 +0100
+++ binutils-2.41/ld/testsuite/ld-powerpc/abs-shared-relr.r 2024-05-31 10:53:21.664603856 +0100
@@ -12,6 +12,7 @@ Relocation section '\.rela\.dyn' at offs
0+10428 0+400000014 R_PPC64_GLOB_DAT 123456789abcdef0 c \+ 0
0+10450 0+400000026 R_PPC64_ADDR64 123456789abcdef0 c \+ 0
-Relocation section '\.relr\.dyn' at offset .* contains 1 entry:
- 1 offset
-0+10438
+Relocation section '\.relr\.dyn' at offset .* contains 1 entry which relocates 1 location:
+Index: Entry Address Symbolic Address
+0000: +[0-9a-f]+ [0-9a-f]+ +x
+
diff -rupN binutils,orig/ld/testsuite/ld-x86-64/dt-relr-1a-x32.d binutils-2.41/ld/testsuite/ld-x86-64/dt-relr-1a-x32.d
--- binutils,orig/ld/testsuite/ld-x86-64/dt-relr-1a-x32.d 2024-05-31 10:18:04.781951943 +0100
+++ binutils-2.41/ld/testsuite/ld-x86-64/dt-relr-1a-x32.d 2024-05-31 10:55:07.672773069 +0100
@@ -13,12 +13,11 @@ Relocation section '.rela.plt' at offset
+Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_JUMP_SLOT +0+ +func1 \+ 0
-Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries:
- +3 offsets
-[a-f0-9]+
-[a-f0-9]+
-[a-f0-9]+
-
+Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries which relocate [0-9]+ locations:
+#...
+0000: +[0-9a-f]+ [0-9a-f]+ +.*
+0001: +[0-9a-f]+ [0-9a-f]+ +.*
+ +[0-9a-f]+ +.*
#...
Symbol table '.symtab' contains [0-9]+ entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
diff -rupN binutils,orig/ld/testsuite/ld-x86-64/dt-relr-1a.d binutils-2.41/ld/testsuite/ld-x86-64/dt-relr-1a.d
--- binutils,orig/ld/testsuite/ld-x86-64/dt-relr-1a.d 2024-05-31 10:18:04.781951943 +0100
+++ binutils-2.41/ld/testsuite/ld-x86-64/dt-relr-1a.d 2024-05-31 10:54:21.440699272 +0100
@@ -13,12 +13,11 @@ Relocation section '.rela.plt' at offset
+Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_JUMP_SLOT +0+ +func1 \+ 0
-Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries:
- +3 offsets
-[a-f0-9]+
-[a-f0-9]+
-[a-f0-9]+
-
+Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries which relocate [0-9]+ locations:
+#...
+0000: +[0-9a-f]+ [0-9a-f]+ +.*
+0001: +[0-9a-f]+ [0-9a-f]+ +.*
+ +[0-9a-f]+ +.*
#...
Symbol table '.symtab' contains [0-9]+ entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
diff -rupN binutils,orig/ld/testsuite/ld-x86-64/dt-relr-1b-x32.d binutils-2.41/ld/testsuite/ld-x86-64/dt-relr-1b-x32.d
--- binutils,orig/ld/testsuite/ld-x86-64/dt-relr-1b-x32.d 2024-05-31 10:18:04.781951943 +0100
+++ binutils-2.41/ld/testsuite/ld-x86-64/dt-relr-1b-x32.d 2024-05-31 10:55:27.936805417 +0100
@@ -16,12 +16,11 @@ Relocation section '.rela.plt' at offset
+Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_JUMP_SLOT +0+ +func1 \+ 0
-Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries:
- +3 offsets
-[a-f0-9]+
-[a-f0-9]+
-[a-f0-9]+
-
+Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries which relocate [0-9]+ locations:
+#...
+0000: +[0-9a-f]+ [0-9a-f]+ +.*
+0001: +[0-9a-f]+ [0-9a-f]+ +.*
+ +[0-9a-f]+ +.*
#...
Symbol table '.symtab' contains [0-9]+ entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
diff -rupN binutils,orig/ld/testsuite/ld-x86-64/dt-relr-1b.d binutils-2.41/ld/testsuite/ld-x86-64/dt-relr-1b.d
--- binutils,orig/ld/testsuite/ld-x86-64/dt-relr-1b.d 2024-05-31 10:18:04.781951943 +0100
+++ binutils-2.41/ld/testsuite/ld-x86-64/dt-relr-1b.d 2024-05-31 10:54:44.649736317 +0100
@@ -16,12 +16,11 @@ Relocation section '.rela.plt' at offset
+Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_JUMP_SLOT +0+ +func1 \+ 0
-Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries:
- +3 offsets
-[a-f0-9]+
-[a-f0-9]+
-[a-f0-9]+
-
+Relocation section '.relr.dyn' at offset 0x[a-f0-9]+ contains 2 entries which relocate [0-9]+ locations:
+#...
+0000: +[0-9a-f]+ [0-9a-f]+ +.*
+0001: +[0-9a-f]+ [0-9a-f]+ +.*
+ +[0-9a-f]+ +.*
#...
Symbol table '.symtab' contains [0-9]+ entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
diff -rup binutils.orig/bfd/elfnn-aarch64.c binutils-2.41/bfd/elfnn-aarch64.c
--- binutils.orig/bfd/elfnn-aarch64.c 2024-06-17 16:39:30.773928699 +0100
+++ binutils-2.41/bfd/elfnn-aarch64.c 2024-06-17 16:40:31.696076282 +0100
@@ -9330,6 +9330,8 @@ record_relr_non_got_relocs (bfd *input_b
return true;
if (sec->alignment_power == 0)
return true;
+ if (discarded_section (sec))
+ return true;
sreloc = elf_section_data (sec)->sreloc;
if (sreloc == NULL)
return true;
@@ -9604,8 +9606,7 @@ elfNN_aarch64_size_dynamic_sections (bfd
for (p = (struct elf_dyn_relocs *)
(elf_section_data (s)->local_dynrel); p != NULL; p = p->next)
{
- if (!bfd_is_abs_section (p->sec)
- && bfd_is_abs_section (p->sec->output_section))
+ if (discarded_section (p->sec))
{
/* Input section has been discarded, either because
it is a copy of a linkonce section or due to
Only in binutils-2.41/bfd: elfnn-aarch64.c.orig
diff -rup binutils.orig/ld/testsuite/ld-aarch64/aarch64-elf.exp binutils-2.41/ld/testsuite/ld-aarch64/aarch64-elf.exp
--- binutils.orig/ld/testsuite/ld-aarch64/aarch64-elf.exp 2024-06-17 16:39:33.555935438 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/aarch64-elf.exp 2024-06-17 16:40:40.933098658 +0100
@@ -474,6 +474,8 @@ run_dump_test_lp64 "relr-got-pie"
run_dump_test_lp64 "relr-got-shared"
run_dump_test_lp64 "relr-text-pie"
run_dump_test_lp64 "relr-text-shared"
+run_dump_test_lp64 "relr-discard-pie"
+run_dump_test_lp64 "relr-discard-shared"
if { ![skip_sframe_tests] } {
run_dump_test "sframe-simple-1"
Only in binutils-2.41/ld/testsuite/ld-aarch64: aarch64-elf.exp.orig
Only in binutils-2.41/ld/testsuite/ld-aarch64: relr-discard-pie.d
Only in binutils-2.41/ld/testsuite/ld-aarch64: relr-discard-shared.d
Only in binutils-2.41/ld/testsuite/ld-aarch64: relr-discard.ld
Only in binutils-2.41/ld/testsuite/ld-aarch64: relr-discard.s
--- /dev/null 2024-06-17 07:14:45.537242699 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-discard-pie.d 2024-06-17 16:40:40.934098660 +0100
@@ -0,0 +1,18 @@
+#source: relr-discard.s
+#ld: -pie --no-apply-dynamic-relocs -z pack-relative-relocs -T relr-discard.ld
+#readelf: -rW
+
+# Note: There are unnecessary GOT entries and *_NONE relocations
+# for those GOT entries and discarded locations, this is bug 31850.
+
+Relocation section '\.rela\.dyn' at offset 0x1.* contains 4 entries:
+ Offset Info Type Symbol's Value Symbol's Name \+ Addend
+0000000000000000 0000000000000000 R_AARCH64_NONE 0
+0000000000000000 0000000000000000 R_AARCH64_NONE 0
+0000000000000000 0000000000000000 R_AARCH64_NONE 0
+0000000000000000 0000000000000000 R_AARCH64_NONE 0
+
+Relocation section '\.relr\.dyn' at offset 0x1.* contains 2 entries which relocate 2 locations:
+Index: Entry Address Symbolic Address
+0000: 0000000000020008 0000000000020008 _GLOBAL_OFFSET_TABLE_ \+ 0x8
+0001: 0000000000000003 0000000000020010 _GLOBAL_OFFSET_TABLE_ \+ 0x10
--- /dev/null 2024-06-17 07:14:45.537242699 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-discard-shared.d 2024-06-17 16:40:40.934098660 +0100
@@ -0,0 +1,18 @@
+#source: relr-discard.s
+#ld: -shared --no-apply-dynamic-relocs -z pack-relative-relocs -T relr-discard.ld
+#readelf: -rW
+
+# Note: There are unnecessary GOT entries and *_NONE relocations
+# for those GOT entries and discarded locations, this is bug 31850.
+
+Relocation section '\.rela\.dyn' at offset 0x1.* contains 5 entries:
+ Offset Info Type Symbol's Value Symbol's Name \+ Addend
+0000000000000000 0000000000000000 R_AARCH64_NONE 0
+0000000000000000 0000000000000000 R_AARCH64_NONE 0
+0000000000000000 0000000000000000 R_AARCH64_NONE 0
+0000000000000000 0000000000000000 R_AARCH64_NONE 0
+0000000000020010 .* R_AARCH64_GLOB_DAT 000000000001000c sym_global \+ 0
+
+Relocation section '\.relr\.dyn' at offset 0x1.* contains 1 entry which relocates 1 location:
+Index: Entry Address Symbolic Address
+0000: 0000000000020008 0000000000020008 _GLOBAL_OFFSET_TABLE_ \+ 0x8
--- /dev/null 2024-06-17 07:14:45.537242699 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-discard.ld 2024-06-17 16:40:40.935098663 +0100
@@ -0,0 +1,13 @@
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SECTIONS
+{
+ /DISCARD/ : { *(.discard.*) }
+
+ . = 0x10000;
+ .text : { *(.text) }
+ . = 0x20000;
+ .got : { *(.got) *(.got.plt)}
+ . = 0x30000;
+ .data : { *(.data) *(.data.*) }
+}
--- /dev/null 2024-06-17 07:14:45.537242699 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-discard.s 2024-06-17 16:40:40.935098663 +0100
@@ -0,0 +1,63 @@
+// Test DT_RELR with references in discarded sections.
+
+.text
+.p2align 3
+.global _start
+_start:
+ nop
+
+sym_local:
+ nop
+
+.global sym_hidden
+.hidden sym_hidden
+sym_hidden:
+ nop
+
+.global sym_global
+sym_global:
+ nop
+
+.global sym_global_abs
+.set sym_global_abs, 42
+
+.global sym_weak_undef
+.weak sym_weak_undef
+
+.section .discard.got_local,"ax"
+ adrp x0, :got:sym_local
+ ldr x0, [x0, :got_lo12:sym_local]
+
+.section .discard.got_global,"ax"
+ adrp x0, :got:sym_global
+ ldr x0, [x0, :got_lo12:sym_global]
+
+.section .discard.local,"a"
+.p2align 1
+discard_local:
+.xword sym_local
+
+.section .discard.hidden,"a"
+.p2align 1
+discard_hidden:
+.xword sym_hidden
+
+.section .discard.global,"a"
+.p2align 1
+discard_global:
+.xword sym_global
+
+.section .discard.global_abs,"a"
+.p2align 1
+discard_global_abs:
+.xword sym_global_abs
+
+.section .discard.weak_undef,"a"
+.p2align 1
+discard_weak_undef:
+.xword sym_weak_undef
+
+.section .discard._DYNAMIC,"a"
+.p2align 1
+discard_DYNAMIC:
+.xword _DYNAMIC
--- binutils.orig/bfd/elfnn-aarch64.c 2024-07-03 11:30:06.253468451 +0100
+++ binutils-2.41/bfd/elfnn-aarch64.c 2024-07-03 11:32:46.511868389 +0100
@@ -5993,8 +5993,6 @@ elfNN_aarch64_final_link_relocate (reloc
{
/* Don't emit a relative relocation that is packed, only
apply the addend. */
- if (globals->no_apply_dynamic_relocs)
- return bfd_reloc_ok;
return _bfd_final_link_relocate (howto, input_bfd, input_section,
contents, rel->r_offset, value,
signed_addend);
diff -rup binutils.orig/ld/testsuite/ld-aarch64/relr-align.d binutils-2.41/ld/testsuite/ld-aarch64/relr-align.d
--- binutils.orig/ld/testsuite/ld-aarch64/relr-align.d 2024-12-02 18:36:21.957480121 +0000
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-align.d 2024-12-02 18:37:32.142592796 +0000
@@ -2,13 +2,13 @@
#ld: -shared -z pack-relative-relocs -T relocs.ld
#readelf: -rW
-Relocation section '\.rela\.dyn' at offset 0x10090 contains 3 entries:
+Relocation section '\.rela\.dyn' at offset 0x100.. contains 3 entries:
Offset Info Type Symbol's Value Symbol's Name \+ Addend
0000000012340011 0000000000000403 R_AARCH64_RELATIVE 10000
0000000012340019 0000000000000403 R_AARCH64_RELATIVE 10000
0000000012340041 0000000000000403 R_AARCH64_RELATIVE 10000
-Relocation section '\.relr\.dyn' at offset 0x100d8 contains 9 entries which relocate 10 locations:
+Relocation section '\.relr\.dyn' at offset 0x100.. contains 9 entries which relocate 10 locations:
Index: Entry Address Symbolic Address
0000: 0000000012340000 0000000012340000 double_0
0001: 0000000000000003 0000000012340008 double_0 \+ 0x8
diff -rup binutils.orig/ld/testsuite/ld-aarch64/relr-data-shared.d binutils-2.41/ld/testsuite/ld-aarch64/relr-data-shared.d
--- binutils.orig/ld/testsuite/ld-aarch64/relr-data-shared.d 2024-12-02 18:36:21.957480121 +0000
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-data-shared.d 2024-12-02 18:37:58.702635434 +0000
@@ -2,7 +2,7 @@
#ld: -shared -z pack-relative-relocs -T relocs.ld
#readelf: -rW
-Relocation section '\.rela\.dyn' at offset 0x10150 contains 6 entries:
+Relocation section '\.rela\.dyn' at offset 0x101.. contains 6 entries:
Offset Info Type Symbol's Value Symbol's Name \+ Addend
0000000012340000 0000000000000403 R_AARCH64_RELATIVE 10004
0000000012340008 0000000000000403 R_AARCH64_RELATIVE 10008
@@ -11,7 +11,7 @@ Relocation section '\.rela\.dyn' at offs
0000000012340030 0000000400000101 R_AARCH64_ABS64 000000000001000c sym_global \+ 0
0000000012340040 0000000300000101 R_AARCH64_ABS64 0000000000000000 sym_weak_undef \+ 0
-Relocation section '\.relr\.dyn' at offset 0x101e0 contains 2 entries which relocate 3 locations:
+Relocation section '\.relr\.dyn' at offset 0x101.. contains 2 entries which relocate 3 locations:
Index: Entry Address Symbolic Address
0000: 0000000012340020 0000000012340020 aligned_local
0001: 0000000000000023 0000000012340028 aligned_hidden
diff -rup binutils.orig/ld/testsuite/ld-aarch64/relr-got-shared.d binutils-2.41/ld/testsuite/ld-aarch64/relr-got-shared.d
--- binutils.orig/ld/testsuite/ld-aarch64/relr-got-shared.d 2024-12-02 18:36:21.957480121 +0000
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-got-shared.d 2024-12-02 18:38:21.422671912 +0000
@@ -2,13 +2,13 @@
#ld: -shared -z pack-relative-relocs -T relocs.ld
#readelf: -rW
-Relocation section '\.rela\.dyn' at offset 0x10168 contains 3 entries:
+Relocation section '\.rela\.dyn' at offset 0x101.. contains 3 entries:
Offset Info Type Symbol's Value Symbol's Name \+ Addend
0000000000020020 0000000300000401 R_AARCH64_GLOB_DAT 0000000000010038 sym_global \+ 0
0000000000020028 0000000500000401 R_AARCH64_GLOB_DAT 000000000000002a sym_global_abs \+ 0
0000000000020030 0000000200000401 R_AARCH64_GLOB_DAT 0000000000000000 sym_weak_undef \+ 0
-Relocation section '\.relr\.dyn' at offset 0x101b0 contains 2 entries which relocate 3 locations:
+Relocation section '\.relr\.dyn' at offset 0x101.. contains 2 entries which relocate 3 locations:
Index: Entry Address Symbolic Address
0000: 0000000000020008 0000000000020008 _GLOBAL_OFFSET_TABLE_ \+ 0x8
0001: 0000000000000007 0000000000020010 _GLOBAL_OFFSET_TABLE_ \+ 0x10
--- binutils.orig/ld/testsuite/ld-aarch64/relr-text-shared.d 2024-12-02 18:36:21.957480121 +0000
+++ binutils-2.41/ld/testsuite/ld-aarch64/relr-text-shared.d 2024-12-02 19:05:37.138237202 +0000
@@ -5,10 +5,10 @@
#...
0x0000000000000016 \(TEXTREL\) 0x0
#...
- 0x0000000000000024 \(RELR\) 0x10098
+ 0x0000000000000024 \(RELR\) 0x100..
0x0000000000000023 \(RELRSZ\) 8 \(bytes\)
0x0000000000000025 \(RELRENT\) 8 \(bytes\)
#...
-Relocation section '.relr.dyn' at offset 0x10098 contains 1 entry which relocates 1 location:
+Relocation section '.relr.dyn' at offset 0x100.. contains 1 entry which relocates 1 location:
Index: Entry Address Symbolic Address
0000: 0000000000010000 0000000000010000 _start