[arch-commits] Commit in binutils/trunk (3 files)

Frederik Schwan freswa at gemini.archlinux.org
Fri Aug 5 15:24:35 UTC 2022


    Date: Friday, August 5, 2022 @ 15:24:35
  Author: freswa
Revision: 452085

upgpkg: binutils 2.39-1

Modified:
  binutils/trunk/PKGBUILD
Deleted:
  binutils/trunk/debug_loclists.patch
  binutils/trunk/fix-incorrect-undefined-symbol.patch

--------------------------------------+
 PKGBUILD                             |   11 
 debug_loclists.patch                 | 1219 ---------------------------------
 fix-incorrect-undefined-symbol.patch |  114 ---
 3 files changed, 3 insertions(+), 1341 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2022-08-05 14:47:47 UTC (rev 452084)
+++ PKGBUILD	2022-08-05 15:24:35 UTC (rev 452085)
@@ -6,9 +6,9 @@
 # toolchain build order: linux-api-headers->glibc->binutils->gcc->glibc->binutils->gcc
 
 pkgname=binutils
-pkgver=2.38
-_commit=5c0b4ee406035917d0e50aa138194fab57ae6bf8
-pkgrel=7
+pkgver=2.39
+_commit=b51c2fec1da205ea3e7354cbb3e253018d64873c
+pkgrel=1
 pkgdesc='A set of programs to assemble and manipulate binary and object files'
 arch=(x86_64)
 url='https://www.gnu.org/software/binutils/'
@@ -22,10 +22,8 @@
 replaces=(binutils-multilib)
 options=(staticlibs !distcc !ccache debug)
 source=(git+https://sourceware.org/git/binutils-gdb.git#commit=${_commit}
-        debug_loclists.patch
         gold-warn-unsupported.patch)
 sha256sums=('SKIP'
-            'fda14fc4879dba6e7822065e7c938a848ace3ee8f8984f4227aba0fb26912bb4'
             '2d430b66f84a19c154725ec535280c493be1d34f1a90f95208dce02fecd0e4e4')
 validpgpkeys=(3A24BC1E8FB409FA9F14371813FCEF89DD9E3C4F)
 
@@ -38,9 +36,6 @@
   # Turn off development mode (-Werror, gas run-time checks, date in sonames)
   sed -i '/^development=/s/true/false/' bfd/development.sh
 
-  # https://sourceware.org/bugzilla/show_bug.cgi?id=28981
-  patch -Np1 -i "${srcdir}"/debug_loclists.patch
-
   # Creds @Fedora
   # Change the gold configuration script to only warn about
   # unsupported targets.  This allows the binutils to be built with

Deleted: debug_loclists.patch
===================================================================
--- debug_loclists.patch	2022-08-05 14:47:47 UTC (rev 452084)
+++ debug_loclists.patch	2022-08-05 15:24:35 UTC (rev 452085)
@@ -1,1219 +0,0 @@
-From d8441ee9fe5a5b38cb4b4874427b12f92a2dfa62 Mon Sep 17 00:00:00 2001
-From: Nick Clifton <nickc at redhat.com>
-Date: Wed, 6 Apr 2022 14:43:37 +0100
-Subject: [PATCH] Add code to display the contents of .debug_loclists sections
- which contain offset entry tables.
-
-	PR 28981
-	* dwarf.c (fetch_indexed_value): Rename to fecth_indexed_addr and
-	return the address, rather than a string.
-	(fetch_indexed_value): New function - returns a value indexed by a
-	DW_FORM_loclistx or DW_FORM_rnglistx form.
-	(read_and_display_attr_value): Add support for DW_FORM_loclistx
-	and DW_FORM_rnglistx.
-	(process_debug_info): Load the loclists and rnglists sections.
-	(display_loclists_list): Add support for DW_LLE_base_addressx,
-	DW_LLE_startx_endx, DW_LLE_startx_length and
-	DW_LLE_default_location.
-	(display_offset_entry_loclists): New function.  Displays a
-	.debug_loclists section that contains offset entry tables.
-	(display_debug_loc): Call the new function.
-	(display_debug_rnglists_list): Add support for
-	DW_RLE_base_addressx, DW_RLE_startx_endx and DW_RLE_startx_length.
-	(display_debug_ranges): Display the contents of the section's
-	header.
-	* dwarf.h (struct debug_info): Add loclists_base field.
-	* testsuite/binutils-all/dw5.W: Update expected output.
-	* testsuite/binutils-all/x86-64/pr26808.dump: Likewise.
-
-(cherry picked from commit 19c26da69d68d5d863f37c06ad73ab6292d02ffa)
----
- binutils/dwarf.c                              | 513 +++++++++++++++---
- binutils/dwarf.h                              |   4 +
- binutils/testsuite/binutils-all/dw5.W         |   2 +-
- .../binutils-all/x86-64/pr26808.dump          |  82 +--
- 4 files changed, 487 insertions(+), 114 deletions(-)
-
-diff --git a/binutils/dwarf.c b/binutils/dwarf.c
-index bc33e9f0814..2df84879647 100644
---- a/binutils/dwarf.c
-+++ b/binutils/dwarf.c
-@@ -240,7 +240,7 @@ static const char *
- dwarf_vmatoa_1 (const char *fmtch, dwarf_vma value, unsigned num_bytes)
- {
-   /* As dwarf_vmatoa is used more then once in a printf call
--     for output, we are cycling through an fixed array of pointers
-+     for output, we are cycling through a fixed array of pointers
-      for return address.  */
-   static int buf_pos = 0;
-   static struct dwarf_vmatoa_buf
-@@ -796,24 +796,70 @@ fetch_indexed_string (dwarf_vma idx, struct cu_tu_set *this_set,
-   return ret;
- }
- 
--static const char *
--fetch_indexed_value (dwarf_vma offset, dwarf_vma bytes)
-+static dwarf_vma
-+fetch_indexed_addr (dwarf_vma offset, uint32_t num_bytes)
- {
-   struct dwarf_section *section = &debug_displays [debug_addr].section;
- 
-   if (section->start == NULL)
--    return (_("<no .debug_addr section>"));
-+    {
-+      warn (_("<no .debug_addr section>"));
-+      return 0;
-+    }
- 
--  if (offset + bytes > section->size)
-+  if (offset + num_bytes > section->size)
-     {
-       warn (_("Offset into section %s too big: 0x%s\n"),
- 	    section->name, dwarf_vmatoa ("x", offset));
--      return "<offset too big>";
-+      return 0;
-     }
- 
--  return dwarf_vmatoa ("x", byte_get (section->start + offset, bytes));
-+  return byte_get (section->start + offset, num_bytes);
- }
- 
-+/* Fetch a value from a debug section that has been indexed by
-+   something in another section (eg DW_FORM_loclistx).
-+   Returns 0 if the value could not be found.  */
-+
-+static dwarf_vma
-+fetch_indexed_value (dwarf_vma                        index,
-+		     enum dwarf_section_display_enum  sec_enum)
-+{
-+  struct dwarf_section *section = &debug_displays [sec_enum].section;
-+
-+  if (section->start == NULL)
-+    {
-+      warn (_("Unable to locate %s section\n"), section->uncompressed_name);
-+      return 0;
-+    }
-+
-+  uint32_t pointer_size, bias;
-+
-+  if (byte_get (section->start, 4) == 0xffffffff)
-+    {
-+      pointer_size = 8;
-+      bias = 20;
-+    }
-+  else
-+    {
-+      pointer_size = 4;
-+      bias = 12;
-+    }
-+ 
-+  dwarf_vma offset = index * pointer_size;
-+
-+  /* Offsets are biased by the size of the section header.  */
-+  offset += bias;
-+
-+  if (offset + pointer_size > section->size)
-+    {
-+      warn (_("Offset into section %s too big: 0x%s\n"),
-+	    section->name, dwarf_vmatoa ("x", offset));
-+      return 0;
-+    }
-+
-+  return byte_get (section->start + offset, pointer_size);
-+}
- 
- /* FIXME:  There are better and more efficient ways to handle
-    these structures.  For now though, I just want something that
-@@ -1999,6 +2045,8 @@ skip_attr_bytes (unsigned long form,
-     case DW_FORM_strx:
-     case DW_FORM_GNU_addr_index:
-     case DW_FORM_addrx:
-+    case DW_FORM_loclistx:
-+    case DW_FORM_rnglistx:
-       READ_ULEB (uvalue, data, end);
-       break;
- 
-@@ -2410,9 +2458,6 @@ read_and_display_attr_value (unsigned long           attribute,
- 
-   switch (form)
-     {
--    default:
--      break;
--
-     case DW_FORM_ref_addr:
-       if (dwarf_version == 2)
- 	SAFE_BYTE_GET_AND_INC (uvalue, data, pointer_size, end);
-@@ -2496,6 +2541,8 @@ read_and_display_attr_value (unsigned long           attribute,
-     case DW_FORM_udata:
-     case DW_FORM_GNU_addr_index:
-     case DW_FORM_addrx:
-+    case DW_FORM_loclistx:
-+    case DW_FORM_rnglistx:
-       READ_ULEB (uvalue, data, end);
-       break;
- 
-@@ -2515,6 +2562,9 @@ read_and_display_attr_value (unsigned long           attribute,
-     case DW_FORM_implicit_const:
-       uvalue = implicit_const;
-       break;
-+
-+    default:
-+      break;
-     }
- 
-   switch (form)
-@@ -2710,6 +2760,8 @@ read_and_display_attr_value (unsigned long           attribute,
-     case DW_FORM_addrx2:
-     case DW_FORM_addrx3:
-     case DW_FORM_addrx4:
-+    case DW_FORM_loclistx:
-+    case DW_FORM_rnglistx:
-       if (!do_loc)
- 	{
- 	  dwarf_vma base;
-@@ -2728,11 +2780,11 @@ read_and_display_attr_value (unsigned long           attribute,
- 	    /* We have already displayed the form name.  */
- 	    printf (_("%c(index: 0x%s): %s"), delimiter,
- 		    dwarf_vmatoa ("x", uvalue),
--		    fetch_indexed_value (offset, pointer_size));
-+		    dwarf_vmatoa ("x", fetch_indexed_addr (offset, pointer_size)));
- 	  else
- 	    printf (_("%c(addr_index: 0x%s): %s"), delimiter,
- 		    dwarf_vmatoa ("x", uvalue),
--		    fetch_indexed_value (offset, pointer_size));
-+		    dwarf_vmatoa ("x", fetch_indexed_addr (offset, pointer_size)));
- 	}
-       break;
- 
-@@ -2754,6 +2806,13 @@ read_and_display_attr_value (unsigned long           attribute,
-     {
-       switch (attribute)
- 	{
-+	case DW_AT_loclists_base:
-+	  if (debug_info_p->loclists_base)
-+	    warn (_("CU @ 0x%s has multiple loclists_base values"),
-+		  dwarf_vmatoa ("x", debug_info_p->cu_offset));
-+	  debug_info_p->loclists_base = uvalue;
-+	  break;
-+
- 	case DW_AT_frame_base:
- 	  have_frame_base = 1;
- 	  /* Fall through.  */
-@@ -2776,7 +2835,8 @@ read_and_display_attr_value (unsigned long           attribute,
- 	case DW_AT_GNU_call_site_target_clobbered:
- 	  if ((dwarf_version < 4
- 	       && (form == DW_FORM_data4 || form == DW_FORM_data8))
--	      || form == DW_FORM_sec_offset)
-+	      || form == DW_FORM_sec_offset
-+	      || form == DW_FORM_loclistx)
- 	    {
- 	      /* Process location list.  */
- 	      unsigned int lmax = debug_info_p->max_loc_offsets;
-@@ -2796,11 +2856,17 @@ read_and_display_attr_value (unsigned long           attribute,
- 			       lmax, sizeof (*debug_info_p->have_frame_base));
- 		  debug_info_p->max_loc_offsets = lmax;
- 		}
--	      if (this_set != NULL)
-+
-+	      if (form == DW_FORM_loclistx)
-+		uvalue = fetch_indexed_value (uvalue, loclists);
-+	      else if (this_set != NULL)
- 		uvalue += this_set->section_offsets [DW_SECT_LOC];
-+
- 	      debug_info_p->have_frame_base [num] = have_frame_base;
- 	      if (attribute != DW_AT_GNU_locviews)
- 		{
-+		  uvalue += debug_info_p->loclists_base;
-+
- 		  /* Corrupt DWARF info can produce more offsets than views.
- 		     See PR 23062 for an example.  */
- 		  if (debug_info_p->num_loc_offsets
-@@ -2844,7 +2910,8 @@ read_and_display_attr_value (unsigned long           attribute,
- 	case DW_AT_ranges:
- 	  if ((dwarf_version < 4
- 	       && (form == DW_FORM_data4 || form == DW_FORM_data8))
--	      || form == DW_FORM_sec_offset)
-+	      || form == DW_FORM_sec_offset
-+	      || form == DW_FORM_rnglistx)
- 	    {
- 	      /* Process range list.  */
- 	      unsigned int lmax = debug_info_p->max_range_lists;
-@@ -2858,6 +2925,10 @@ read_and_display_attr_value (unsigned long           attribute,
- 			       lmax, sizeof (*debug_info_p->range_lists));
- 		  debug_info_p->max_range_lists = lmax;
- 		}
-+
-+	      if (form == DW_FORM_rnglistx)
-+		uvalue = fetch_indexed_value (uvalue, rnglists);
-+
- 	      debug_info_p->range_lists [num] = uvalue;
- 	      debug_info_p->num_range_lists++;
- 	    }
-@@ -3231,6 +3302,7 @@ read_and_display_attr_value (unsigned long           attribute,
-       have_frame_base = 1;
-       /* Fall through.  */
-     case DW_AT_location:
-+    case DW_AT_loclists_base:
-     case DW_AT_string_length:
-     case DW_AT_return_addr:
-     case DW_AT_data_member_location:
-@@ -3248,7 +3320,8 @@ read_and_display_attr_value (unsigned long           attribute,
-     case DW_AT_GNU_call_site_target_clobbered:
-       if ((dwarf_version < 4
- 	   && (form == DW_FORM_data4 || form == DW_FORM_data8))
--	  || form == DW_FORM_sec_offset)
-+	  || form == DW_FORM_sec_offset
-+	  || form == DW_FORM_loclistx)
- 	printf (_(" (location list)"));
-       /* Fall through.  */
-     case DW_AT_allocated:
-@@ -3517,6 +3590,9 @@ process_debug_info (struct dwarf_section * section,
-     }
- 
-   load_debug_section_with_follow (abbrev_sec, file);
-+  load_debug_section_with_follow (loclists, file);
-+  load_debug_section_with_follow (rnglists, file);
-+  
-   if (debug_displays [abbrev_sec].section.start == NULL)
-     {
-       warn (_("Unable to locate %s section!\n"),
-@@ -3729,6 +3805,7 @@ process_debug_info (struct dwarf_section * section,
- 	  debug_information [unit].have_frame_base = NULL;
- 	  debug_information [unit].max_loc_offsets = 0;
- 	  debug_information [unit].num_loc_offsets = 0;
-+	  debug_information [unit].loclists_base = 0;
- 	  debug_information [unit].range_lists = NULL;
- 	  debug_information [unit].max_range_lists= 0;
- 	  debug_information [unit].num_range_lists = 0;
-@@ -6465,20 +6542,21 @@ display_loc_list (struct dwarf_section *section,
- /* Display a location list from a normal (ie, non-dwo) .debug_loclists section.  */
- 
- static void
--display_loclists_list (struct dwarf_section *section,
--		       unsigned char **start_ptr,
--		       unsigned int debug_info_entry,
--		       dwarf_vma offset,
--		       dwarf_vma base_address,
--		       unsigned char **vstart_ptr,
--		       int has_frame_base)
--{
--  unsigned char *start = *start_ptr, *vstart = *vstart_ptr;
--  unsigned char *section_end = section->start + section->size;
--  dwarf_vma    cu_offset;
--  unsigned int pointer_size;
--  unsigned int offset_size;
--  int dwarf_version;
-+display_loclists_list (struct dwarf_section *  section,
-+		       unsigned char **        start_ptr,
-+		       unsigned int            debug_info_entry,
-+		       dwarf_vma               offset,
-+		       dwarf_vma               base_address,
-+		       unsigned char **        vstart_ptr,
-+		       int                     has_frame_base)
-+{
-+  unsigned char *  start = *start_ptr;
-+  unsigned char *  vstart = *vstart_ptr;
-+  unsigned char *  section_end = section->start + section->size;
-+  dwarf_vma        cu_offset;
-+  unsigned int     pointer_size;
-+  unsigned int     offset_size;
-+  unsigned int     dwarf_version;
- 
-   /* Initialize it due to a false compiler warning.  */
-   dwarf_vma begin = -1, vbegin = -1;
-@@ -6544,27 +6622,59 @@ display_loclists_list (struct dwarf_section *section,
- 	case DW_LLE_end_of_list:
- 	  printf (_("<End of list>\n"));
- 	  break;
-+
-+	case DW_LLE_base_addressx:
-+	  READ_ULEB (base_address, start, section_end);
-+	  print_dwarf_vma (base_address, pointer_size);
-+	  printf (_("(index into .debug_addr) "));
-+	  base_address = fetch_indexed_addr (base_address, pointer_size);
-+	  print_dwarf_vma (base_address, pointer_size);
-+	  printf (_("(base address)\n"));
-+	  break;
-+
-+	case DW_LLE_startx_endx:
-+	  READ_ULEB (begin, start, section_end);
-+	  begin = fetch_indexed_addr (begin, pointer_size);
-+	  READ_ULEB (end, start, section_end);
-+	  end = fetch_indexed_addr (end, pointer_size);
-+	  break;
-+
-+	case DW_LLE_startx_length:
-+	  READ_ULEB (begin, start, section_end);
-+	  begin = fetch_indexed_addr (begin, pointer_size);
-+	  READ_ULEB (end, start, section_end);
-+	  end += begin;
-+	  break;
-+
-+	case DW_LLE_default_location:
-+	  begin = end = 0;
-+	  break;
-+	  
- 	case DW_LLE_offset_pair:
- 	  READ_ULEB (begin, start, section_end);
- 	  begin += base_address;
- 	  READ_ULEB (end, start, section_end);
- 	  end += base_address;
- 	  break;
-+
-+	case DW_LLE_base_address:
-+	  SAFE_BYTE_GET_AND_INC (base_address, start, pointer_size,
-+				 section_end);
-+	  print_dwarf_vma (base_address, pointer_size);
-+	  printf (_("(base address)\n"));
-+	  break;
-+
- 	case DW_LLE_start_end:
- 	  SAFE_BYTE_GET_AND_INC (begin, start, pointer_size, section_end);
- 	  SAFE_BYTE_GET_AND_INC (end, start, pointer_size, section_end);
- 	  break;
-+
- 	case DW_LLE_start_length:
- 	  SAFE_BYTE_GET_AND_INC (begin, start, pointer_size, section_end);
- 	  READ_ULEB (end, start, section_end);
- 	  end += begin;
- 	  break;
--	case DW_LLE_base_address:
--	  SAFE_BYTE_GET_AND_INC (base_address, start, pointer_size,
--				 section_end);
--	  print_dwarf_vma (base_address, pointer_size);
--	  printf (_("(base address)\n"));
--	  break;
-+
- #ifdef DW_LLE_view_pair
- 	case DW_LLE_view_pair:
- 	  if (vstart)
-@@ -6578,15 +6688,17 @@ display_loclists_list (struct dwarf_section *section,
- 	  printf (_("views for:\n"));
- 	  continue;
- #endif
-+
- 	default:
- 	  error (_("Invalid location list entry type %d\n"), llet);
- 	  return;
- 	}
-+
-       if (llet == DW_LLE_end_of_list)
- 	break;
--      if (llet != DW_LLE_offset_pair
--	  && llet != DW_LLE_start_end
--	  && llet != DW_LLE_start_length)
-+
-+      if (llet == DW_LLE_base_address
-+	  || llet == DW_LLE_base_addressx)
- 	continue;
- 
-       if (start == section_end)
-@@ -6827,6 +6939,218 @@ loc_offsets_compar (const void *ap, const void *bp)
-   return ret;
- }
- 
-+static int
-+display_offset_entry_loclists (struct dwarf_section *section)
-+{
-+  unsigned char *  start = section->start;
-+  unsigned char * const end = start + section->size;
-+
-+  introduce (section, false);  
-+
-+  do
-+    {
-+      dwarf_vma        length;
-+      unsigned short   version;
-+      unsigned char    address_size;
-+      unsigned char    segment_selector_size;
-+      uint32_t         offset_entry_count;
-+      uint32_t         i;
-+      bool             is_64bit;
-+
-+      printf (_("Table at Offset 0x%lx\n"), (long)(start - section->start));
-+
-+      SAFE_BYTE_GET_AND_INC (length, start, 4, end);
-+      if (length == 0xffffffff)
-+	{
-+	  is_64bit = true;
-+	  SAFE_BYTE_GET_AND_INC (length, start, 8, end);
-+	}
-+      else
-+	is_64bit = false;
-+
-+      SAFE_BYTE_GET_AND_INC (version, start, 2, end);
-+      SAFE_BYTE_GET_AND_INC (address_size, start, 1, end);
-+      SAFE_BYTE_GET_AND_INC (segment_selector_size, start, 1, end);
-+      SAFE_BYTE_GET_AND_INC (offset_entry_count, start, 4, end);
-+
-+      printf (_("  Length:          0x%s\n"), dwarf_vmatoa ("x", length));
-+      printf (_("  DWARF version:   %u\n"), version);
-+      printf (_("  Address size:    %u\n"), address_size);
-+      printf (_("  Segment size:    %u\n"), segment_selector_size);
-+      printf (_("  Offset entries:  %u\n"), offset_entry_count);
-+
-+      if (version < 5)
-+	{
-+	  warn (_("The %s section contains a corrupt or "
-+		  "unsupported version number: %d.\n"),
-+		section->name, version);
-+	  return 0;
-+	}
-+
-+      if (segment_selector_size != 0)
-+	{
-+	  warn (_("The %s section contains an "
-+		  "unsupported segment selector size: %d.\n"),
-+		section->name, segment_selector_size);
-+	  return 0;
-+	}
-+      
-+      if (offset_entry_count == 0)
-+	{
-+	  warn (_("The %s section contains a table without offset\n"),
-+		section->name);
-+	  return 0;
-+	}
-+  
-+      printf (_("\n   Offset Entries starting at 0x%lx:\n"),
-+	      (long)(start - section->start));
-+
-+      if (is_64bit)
-+	{
-+	  for (i = 0; i < offset_entry_count; i++)
-+	    {
-+	      dwarf_vma entry;
-+
-+	      SAFE_BYTE_GET_AND_INC (entry, start, 8, end);
-+	      printf (_("    [%6u] 0x%s\n"), i, dwarf_vmatoa ("x", entry));
-+	    }
-+	}
-+      else
-+	{
-+	  for (i = 0; i < offset_entry_count; i++)
-+	    {
-+	      uint32_t entry;
-+
-+	      SAFE_BYTE_GET_AND_INC (entry, start, 4, end);
-+	      printf (_("    [%6u] 0x%x\n"), i, entry);
-+	    }
-+	}
-+
-+      putchar ('\n');
-+
-+      uint32_t j;
-+
-+      for (j = 1, i = 0; i < offset_entry_count;)
-+	{
-+	  unsigned char  lle;
-+	  dwarf_vma      base_address = 0;
-+	  dwarf_vma      begin;
-+	  dwarf_vma      finish;
-+	  dwarf_vma      off = start - section->start;
-+
-+	  if (j != i)
-+	    {
-+	      printf (_("   Offset Entry %u\n"), i);
-+	      j = i;
-+	    }
-+
-+	  printf ("    ");
-+	  print_dwarf_vma (off, 4);
-+
-+	  SAFE_BYTE_GET_AND_INC (lle, start, 1, end);
-+
-+	  switch (lle)
-+	    {
-+	    case DW_LLE_end_of_list:
-+	      printf (_("<End of list>\n\n"));
-+	      i ++;
-+	      continue;
-+
-+	    case DW_LLE_base_addressx:
-+	      READ_ULEB (base_address, start, end);
-+	      print_dwarf_vma (base_address, address_size);
-+	      printf (_("(index into .debug_addr) "));
-+	      base_address = fetch_indexed_addr (base_address, address_size);
-+	      print_dwarf_vma (base_address, address_size);
-+	      printf (_("(base address)\n"));
-+	      continue;
-+
-+	    case DW_LLE_startx_endx:
-+	      READ_ULEB (begin, start, end);
-+	      begin = fetch_indexed_addr (begin, address_size);
-+	      READ_ULEB (finish, start, end);
-+	      finish = fetch_indexed_addr (finish, address_size);
-+	      break;
-+
-+	    case DW_LLE_startx_length:
-+	      READ_ULEB (begin, start, end);
-+	      begin = fetch_indexed_addr (begin, address_size);
-+	      READ_ULEB (finish, start, end);
-+	      finish += begin;
-+	      break;
-+
-+	    case DW_LLE_offset_pair:
-+	      READ_ULEB (begin, start, end);
-+	      begin += base_address;
-+	      READ_ULEB (finish, start, end);
-+	      finish += base_address;
-+	      break;
-+
-+	    case DW_LLE_default_location:
-+	      begin = finish = 0;
-+	      break;
-+
-+	    case DW_LLE_base_address:
-+	      SAFE_BYTE_GET_AND_INC (base_address, start, address_size, end);
-+	      print_dwarf_vma (base_address, address_size);
-+	      printf (_("(base address)\n"));
-+	      continue;
-+
-+	    case DW_LLE_start_end:
-+	      SAFE_BYTE_GET_AND_INC (begin,  start, address_size, end);
-+	      SAFE_BYTE_GET_AND_INC (finish, start, address_size, end);
-+	      break;
-+
-+	    case DW_LLE_start_length:
-+	      SAFE_BYTE_GET_AND_INC (begin, start, address_size, end);
-+	      READ_ULEB (finish, start, end);
-+	      finish += begin;
-+	      break;
-+
-+	    default:
-+	      error (_("Invalid location list entry type %d\n"), lle);
-+	      return 0;
-+	    }
-+
-+	  if (start == end)
-+	    {
-+	      warn (_("Location list starting at offset 0x%lx is not terminated.\n"),
-+		    (unsigned long) off);
-+	      break;
-+	    }
-+
-+	  print_dwarf_vma (begin, address_size);
-+	  print_dwarf_vma (finish, address_size);
-+
-+	  if (begin == finish)
-+	    fputs (_(" (start == end)"), stdout);
-+	  else if (begin > finish)
-+	    fputs (_(" (start > end)"), stdout);
-+
-+	  /* Read the counted location descriptions.  */
-+	  READ_ULEB (length, start, end);
-+
-+	  if (length > (size_t) (end - start))
-+	    {
-+	      warn (_("Location list starting at offset 0x%lx is not terminated.\n"),
-+		    (unsigned long) off);
-+	      break;
-+	    }
-+
-+	  putchar (' ');
-+	  (void) decode_location_expression (start, address_size, address_size,
-+					     version, length, 0, section);
-+	  start += length;
-+	  putchar ('\n');
-+	}
-+
-+      putchar ('\n');
-+    }
-+  while (start < end);
-+
-+  return 1;
-+}
-+
- static int
- display_debug_loc (struct dwarf_section *section, void *file)
- {
-@@ -6893,13 +7217,9 @@ display_debug_loc (struct dwarf_section *section, void *file)
- 	}
- 
-       SAFE_BYTE_GET_AND_INC (offset_entry_count, hdrptr, 4, end);
-+
-       if (offset_entry_count != 0)
--	{
--	  warn (_("The %s section contains "
--		  "unsupported offset entry count: %d.\n"),
--		section->name, offset_entry_count);
--	  return 0;
--	}
-+	return display_offset_entry_loclists (section);
- 
-       expected_start = hdrptr - section_begin;
-     }
-@@ -6959,9 +7279,10 @@ display_debug_loc (struct dwarf_section *section, void *file)
-   if (debug_information [first].num_loc_offsets > 0
-       && debug_information [first].loc_offsets [0] != expected_start
-       && debug_information [first].loc_views [0] != expected_start)
--    warn (_("Location lists in %s section start at 0x%s\n"),
-+    warn (_("Location lists in %s section start at 0x%s rather than 0x%s\n"),
- 	  section->name,
--	  dwarf_vmatoa ("x", debug_information [first].loc_offsets [0]));
-+	  dwarf_vmatoa ("x", debug_information [first].loc_offsets [0]),
-+	  dwarf_vmatoa ("x", expected_start));
- 
-   if (!locs_sorted)
-     array = (unsigned int *) xcmalloc (num_loc_list, sizeof (unsigned int));
-@@ -7639,24 +7960,44 @@ display_debug_rnglists_list (unsigned char * start,
- 	case DW_RLE_end_of_list:
- 	  printf (_("<End of list>\n"));
- 	  break;
--	case DW_RLE_base_address:
--	  SAFE_BYTE_GET_AND_INC (base_address, start, pointer_size, finish);
-+	case DW_RLE_base_addressx:
-+	  READ_ULEB (base_address, start, finish);
-+	  print_dwarf_vma (base_address, pointer_size);
-+	  printf (_("(base address index) "));
-+	  base_address = fetch_indexed_addr (base_address, pointer_size);
- 	  print_dwarf_vma (base_address, pointer_size);
- 	  printf (_("(base address)\n"));
- 	  break;
--	case DW_RLE_start_length:
--	  SAFE_BYTE_GET_AND_INC (begin, start, pointer_size, finish);
-+	case DW_RLE_startx_endx:
-+	  READ_ULEB (begin, start, finish);
-+	  READ_ULEB (end, start, finish);
-+	  begin = fetch_indexed_addr (begin, pointer_size);
-+	  end   = fetch_indexed_addr (begin, pointer_size);
-+	  break;
-+	case DW_RLE_startx_length:
-+	  READ_ULEB (begin, start, finish);
- 	  READ_ULEB (length, start, finish);
-+	  begin = fetch_indexed_addr (begin, pointer_size);
- 	  end = begin + length;
- 	  break;
- 	case DW_RLE_offset_pair:
- 	  READ_ULEB (begin, start, finish);
- 	  READ_ULEB (end, start, finish);
- 	  break;
-+	case DW_RLE_base_address:
-+	  SAFE_BYTE_GET_AND_INC (base_address, start, pointer_size, finish);
-+	  print_dwarf_vma (base_address, pointer_size);
-+	  printf (_("(base address)\n"));
-+	  break;
- 	case DW_RLE_start_end:
- 	  SAFE_BYTE_GET_AND_INC (begin, start, pointer_size, finish);
- 	  SAFE_BYTE_GET_AND_INC (end, start, pointer_size, finish);
- 	  break;
-+	case DW_RLE_start_length:
-+	  SAFE_BYTE_GET_AND_INC (begin, start, pointer_size, finish);
-+	  READ_ULEB (length, start, finish);
-+	  end = begin + length;
-+	  break;
- 	default:
- 	  error (_("Invalid range list entry type %d\n"), rlet);
- 	  rlet = DW_RLE_end_of_list;
-@@ -7664,7 +8005,7 @@ display_debug_rnglists_list (unsigned char * start,
- 	}
-       if (rlet == DW_RLE_end_of_list)
- 	break;
--      if (rlet == DW_RLE_base_address)
-+      if (rlet == DW_RLE_base_address || rlet == DW_RLE_base_addressx)
- 	continue;
- 
-       /* Only a DW_RLE_offset_pair needs the base address added.  */
-@@ -7709,6 +8050,8 @@ display_debug_ranges (struct dwarf_section *section,
-       return 0;
-     }
- 
-+  introduce (section, false);
-+
-   if (is_rnglists)
-     {
-       dwarf_vma initial_length;
-@@ -7745,19 +8088,19 @@ display_debug_ranges (struct dwarf_section *section,
- 	    }
- 	}
- 
--      /* Get and check the version number.  */
-+      /* Get the other fields in the header.  */
-       SAFE_BYTE_GET_AND_INC (version, start, 2, finish);
--
--      if (version != 5)
--	{
--	  warn (_("Only DWARF version 5 debug_rnglists info "
--		  "is currently supported.\n"));
--	  return 0;
--	}
--
-       SAFE_BYTE_GET_AND_INC (address_size, start, 1, finish);
--
-       SAFE_BYTE_GET_AND_INC (segment_selector_size, start, 1, finish);
-+      SAFE_BYTE_GET_AND_INC (offset_entry_count, start, 4, finish);
-+
-+      printf (_("  Length:          0x%s\n"), dwarf_vmatoa ("x", initial_length));
-+      printf (_("  DWARF version:   %u\n"), version);
-+      printf (_("  Address size:    %u\n"), address_size);
-+      printf (_("  Segment size:    %u\n"), segment_selector_size);
-+      printf (_("  Offset entries:  %u\n"), offset_entry_count);
-+
-+      /* Check the fields.  */
-       if (segment_selector_size != 0)
- 	{
- 	  warn (_("The %s section contains "
-@@ -7766,16 +8109,39 @@ display_debug_ranges (struct dwarf_section *section,
- 	  return 0;
- 	}
- 
--      SAFE_BYTE_GET_AND_INC (offset_entry_count, start, 4, finish);
--      if (offset_entry_count != 0)
-+      if (version < 5)
- 	{
--	  warn (_("The %s section contains "
--		  "unsupported offset entry count: %u.\n"),
--		section->name, offset_entry_count);
-+	  warn (_("Only DWARF version 5+ debug_rnglists info "
-+		  "is currently supported.\n"));
- 	  return 0;
- 	}
--    }
- 
-+      if (offset_entry_count != 0)
-+	{
-+	  printf (_("\n   Offsets starting at 0x%lx:\n"), (long)(start - section->start));
-+	  if (offset_size == 8)
-+	    {
-+	      for (i = 0; i < offset_entry_count; i++)
-+		{
-+		  dwarf_vma entry;
-+
-+		  SAFE_BYTE_GET_AND_INC (entry, start, 8, finish);
-+		  printf (_("    [%6u] 0x%s\n"), i, dwarf_vmatoa ("x", entry));
-+		}
-+	    }
-+	  else
-+	    {
-+	      for (i = 0; i < offset_entry_count; i++)
-+		{
-+		  uint32_t entry;
-+
-+		  SAFE_BYTE_GET_AND_INC (entry, start, 4, finish);
-+		  printf (_("    [%6u] 0x%x\n"), i, entry);
-+		}
-+	    }
-+	}
-+    }
-+  
-   if (load_debug_info (file) == 0)
-     {
-       warn (_("Unable to load/parse the .debug_info section, so cannot interpret the %s section.\n"),
-@@ -7834,8 +8200,7 @@ display_debug_ranges (struct dwarf_section *section,
-     warn (_("Range lists in %s section start at 0x%lx\n"),
- 	  section->name, (unsigned long) range_entries[0].ranges_offset);
- 
--  introduce (section, false);
--
-+  putchar ('\n');
-   printf (_("    Offset   Begin    End\n"));
- 
-   for (i = 0; i < num_range_list; i++)
-@@ -7895,8 +8260,12 @@ display_debug_ranges (struct dwarf_section *section,
-       start = next;
-       last_start = next;
- 
--      (is_rnglists ? display_debug_rnglists_list : display_debug_ranges_list)
--	(start, finish, pointer_size, offset, base_address);
-+      if (is_rnglists)
-+	display_debug_rnglists_list
-+	  (start, finish, pointer_size, offset, base_address);
-+      else
-+	display_debug_ranges_list
-+	  (start, finish, pointer_size, offset, base_address);
-     }
-   putchar ('\n');
- 
-diff --git a/binutils/dwarf.h b/binutils/dwarf.h
-index 18430719d48..164ba507b50 100644
---- a/binutils/dwarf.h
-+++ b/binutils/dwarf.h
-@@ -181,9 +181,13 @@ typedef struct
-   /* This is an array of offsets to the location view table.  */
-   dwarf_vma *    loc_views;
-   int *          have_frame_base;
-+
-+  /* Information for associating location lists with CUs.  */
-   unsigned int   num_loc_offsets;
-   unsigned int   max_loc_offsets;
-   unsigned int   num_loc_views;
-+  dwarf_vma      loclists_base;
-+
-   /* List of .debug_ranges offsets seen in this .debug_info.  */
-   dwarf_vma *    range_lists;
-   unsigned int   num_range_lists;
-diff --git a/binutils/testsuite/binutils-all/dw5.W b/binutils/testsuite/binutils-all/dw5.W
-index ebab8b7d3b0..bfcdac175ba 100644
---- a/binutils/testsuite/binutils-all/dw5.W
-+++ b/binutils/testsuite/binutils-all/dw5.W
-@@ -281,7 +281,7 @@ Contents of the .debug_loclists section:
-     00000039 <End of list>
- 
- Contents of the .debug_rnglists section:
--
-+#...
-     Offset   Begin    End
-     0000000c 0000000000001234 0000000000001236 
-     00000016 0000000000001234 0000000000001239 
-diff --git a/binutils/testsuite/binutils-all/x86-64/pr26808.dump b/binutils/testsuite/binutils-all/x86-64/pr26808.dump
-index f64f9d008f9..7ef73b24dc9 100644
---- a/binutils/testsuite/binutils-all/x86-64/pr26808.dump
-+++ b/binutils/testsuite/binutils-all/x86-64/pr26808.dump
-@@ -30,13 +30,13 @@ Contents of the .debug_info.dwo section:
-     <a5>   DW_AT_decl_file   : 1
-     <a6>   DW_AT_decl_line   : 30
-     <a7>   DW_AT_type        : <0x90>
--    <ab>   DW_AT_low_pc      : (addr_index: 0x0): <no .debug_addr section>
-+    <ab>   DW_AT_low_pc      : (addr_index: 0x0): 0
-     <ac>   DW_AT_high_pc     : 0x304
-     <b4>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <b6>   DW_AT_GNU_all_tail_call_sites: 1
-     <b6>   DW_AT_sibling     : <0x11b>
-  <2><ba>: Abbrev Number: 14 (DW_TAG_lexical_block)
--    <bb>   DW_AT_low_pc      : (addr_index: 0x1): <no .debug_addr section>
-+    <bb>   DW_AT_low_pc      : (addr_index: 0x1): 0
-     <bc>   DW_AT_high_pc     : 0x2fa
-  <3><c4>: Abbrev Number: 15 (DW_TAG_variable)
-     <c5>   DW_AT_name        : c1
-@@ -56,7 +56,7 @@ Contents of the .debug_info.dwo section:
-     <ff>   DW_AT_artificial  : 1
-     <ff>   DW_AT_location    : 2 byte block: fb 2 	(DW_OP_GNU_addr_index <0x2>)
-  <3><102>: Abbrev Number: 14 (DW_TAG_lexical_block)
--    <103>   DW_AT_low_pc      : (addr_index: 0x3): <no .debug_addr section>
-+    <103>   DW_AT_low_pc      : (addr_index: 0x3): 0
-     <104>   DW_AT_high_pc     : 0x2f
-  <4><10c>: Abbrev Number: 17 (DW_TAG_variable)
-     <10d>   DW_AT_name        : i
-@@ -274,7 +274,7 @@ Contents of the .debug_info.dwo section:
-     <2dd>   DW_AT_decl_file   : 1
-     <2de>   DW_AT_decl_line   : 70
-     <2df>   DW_AT_linkage_name: _Z4f13iv
--    <2e8>   DW_AT_low_pc      : (addr_index: 0x0): <no .debug_addr section>
-+    <2e8>   DW_AT_low_pc      : (addr_index: 0x0): 0
-     <2e9>   DW_AT_high_pc     : 0x6
-     <2f1>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <2f3>   DW_AT_GNU_all_call_sites: 1
-@@ -282,7 +282,7 @@ Contents of the .debug_info.dwo section:
-     <2f4>   DW_AT_specification: <0x219>
-     <2f8>   DW_AT_decl_file   : 2
-     <2f9>   DW_AT_decl_line   : 30
--    <2fa>   DW_AT_low_pc      : (addr_index: 0x1): <no .debug_addr section>
-+    <2fa>   DW_AT_low_pc      : (addr_index: 0x1): 0
-     <2fb>   DW_AT_high_pc     : 0x20
-     <303>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <305>   DW_AT_object_pointer: <0x30d>
-@@ -300,7 +300,7 @@ Contents of the .debug_info.dwo section:
-     <31d>   DW_AT_specification: <0x223>
-     <321>   DW_AT_decl_file   : 2
-     <322>   DW_AT_decl_line   : 38
--    <323>   DW_AT_low_pc      : (addr_index: 0x2): <no .debug_addr section>
-+    <323>   DW_AT_low_pc      : (addr_index: 0x2): 0
-     <324>   DW_AT_high_pc     : 0x18
-     <32c>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <32e>   DW_AT_object_pointer: <0x336>
-@@ -316,7 +316,7 @@ Contents of the .debug_info.dwo section:
-     <341>   DW_AT_specification: <0x22d>
-     <345>   DW_AT_decl_file   : 2
-     <346>   DW_AT_decl_line   : 46
--    <347>   DW_AT_low_pc      : (addr_index: 0x3): <no .debug_addr section>
-+    <347>   DW_AT_low_pc      : (addr_index: 0x3): 0
-     <348>   DW_AT_high_pc     : 0x18
-     <350>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <352>   DW_AT_object_pointer: <0x35a>
-@@ -332,7 +332,7 @@ Contents of the .debug_info.dwo section:
-     <365>   DW_AT_specification: <0x237>
-     <369>   DW_AT_decl_file   : 2
-     <36a>   DW_AT_decl_line   : 54
--    <36b>   DW_AT_low_pc      : (addr_index: 0x4): <no .debug_addr section>
-+    <36b>   DW_AT_low_pc      : (addr_index: 0x4): 0
-     <36c>   DW_AT_high_pc     : 0x16
-     <374>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <376>   DW_AT_object_pointer: <0x37e>
-@@ -348,7 +348,7 @@ Contents of the .debug_info.dwo section:
-     <389>   DW_AT_specification: <0x26b>
-     <38d>   DW_AT_decl_file   : 2
-     <38e>   DW_AT_decl_line   : 62
--    <38f>   DW_AT_low_pc      : (addr_index: 0x5): <no .debug_addr section>
-+    <38f>   DW_AT_low_pc      : (addr_index: 0x5): 0
-     <390>   DW_AT_high_pc     : 0x16
-     <398>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <39a>   DW_AT_object_pointer: <0x3a2>
-@@ -366,7 +366,7 @@ Contents of the .debug_info.dwo section:
-     <3b2>   DW_AT_specification: <0x275>
-     <3b6>   DW_AT_decl_file   : 2
-     <3b7>   DW_AT_decl_line   : 72
--    <3b8>   DW_AT_low_pc      : (addr_index: 0x6): <no .debug_addr section>
-+    <3b8>   DW_AT_low_pc      : (addr_index: 0x6): 0
-     <3b9>   DW_AT_high_pc     : 0x1b
-     <3c1>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <3c3>   DW_AT_object_pointer: <0x3cb>
-@@ -382,7 +382,7 @@ Contents of the .debug_info.dwo section:
-     <3d6>   DW_AT_specification: <0x27f>
-     <3da>   DW_AT_decl_file   : 2
-     <3db>   DW_AT_decl_line   : 82
--    <3dc>   DW_AT_low_pc      : (addr_index: 0x7): <no .debug_addr section>
-+    <3dc>   DW_AT_low_pc      : (addr_index: 0x7): 0
-     <3dd>   DW_AT_high_pc     : 0x1b
-     <3e5>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <3e7>   DW_AT_object_pointer: <0x3ef>
-@@ -398,7 +398,7 @@ Contents of the .debug_info.dwo section:
-     <3fa>   DW_AT_specification: <0x289>
-     <3fe>   DW_AT_decl_file   : 2
-     <3ff>   DW_AT_decl_line   : 92
--    <400>   DW_AT_low_pc      : (addr_index: 0x8): <no .debug_addr section>
-+    <400>   DW_AT_low_pc      : (addr_index: 0x8): 0
-     <401>   DW_AT_high_pc     : 0x19
-     <409>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <40b>   DW_AT_object_pointer: <0x413>
-@@ -414,7 +414,7 @@ Contents of the .debug_info.dwo section:
-     <41e>   DW_AT_specification: <0x2ae>
-     <422>   DW_AT_decl_file   : 2
-     <423>   DW_AT_decl_line   : 102
--    <424>   DW_AT_low_pc      : (addr_index: 0x9): <no .debug_addr section>
-+    <424>   DW_AT_low_pc      : (addr_index: 0x9): 0
-     <425>   DW_AT_high_pc     : 0x19
-     <42d>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <42f>   DW_AT_object_pointer: <0x437>
-@@ -432,7 +432,7 @@ Contents of the .debug_info.dwo section:
-     <447>   DW_AT_specification: <0x2b8>
-     <44b>   DW_AT_decl_file   : 2
-     <44c>   DW_AT_decl_line   : 112
--    <44d>   DW_AT_low_pc      : (addr_index: 0xa): <no .debug_addr section>
-+    <44d>   DW_AT_low_pc      : (addr_index: 0xa): 0
-     <44e>   DW_AT_high_pc     : 0x1f
-     <456>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <458>   DW_AT_object_pointer: <0x460>
-@@ -451,7 +451,7 @@ Contents of the .debug_info.dwo section:
-     <471>   DW_AT_decl_line   : 120
-     <472>   DW_AT_linkage_name: _Z4f11av
-     <47b>   DW_AT_type        : <0x242>
--    <47f>   DW_AT_low_pc      : (addr_index: 0xb): <no .debug_addr section>
-+    <47f>   DW_AT_low_pc      : (addr_index: 0xb): 0
-     <480>   DW_AT_high_pc     : 0xb
-     <488>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <48a>   DW_AT_GNU_all_call_sites: 1
-@@ -459,7 +459,7 @@ Contents of the .debug_info.dwo section:
-     <48b>   DW_AT_specification: <0x2c2>
-     <48f>   DW_AT_decl_file   : 2
-     <490>   DW_AT_decl_line   : 126
--    <491>   DW_AT_low_pc      : (addr_index: 0xc): <no .debug_addr section>
-+    <491>   DW_AT_low_pc      : (addr_index: 0xc): 0
-     <492>   DW_AT_high_pc     : 0x20
-     <49a>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <49c>   DW_AT_object_pointer: <0x4a4>
-@@ -478,7 +478,7 @@ Contents of the .debug_info.dwo section:
-     <4b4>   DW_AT_decl_line   : 134
-     <4b5>   DW_AT_linkage_name: _Z3t12v
-     <4bd>   DW_AT_type        : <0x249>
--    <4c1>   DW_AT_low_pc      : (addr_index: 0xd): <no .debug_addr section>
-+    <4c1>   DW_AT_low_pc      : (addr_index: 0xd): 0
-     <4c2>   DW_AT_high_pc     : 0x19
-     <4ca>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <4cc>   DW_AT_GNU_all_tail_call_sites: 1
-@@ -489,7 +489,7 @@ Contents of the .debug_info.dwo section:
-     <4d2>   DW_AT_decl_line   : 142
-     <4d3>   DW_AT_linkage_name: _Z3t13v
-     <4db>   DW_AT_type        : <0x249>
--    <4df>   DW_AT_low_pc      : (addr_index: 0xe): <no .debug_addr section>
-+    <4df>   DW_AT_low_pc      : (addr_index: 0xe): 0
-     <4e0>   DW_AT_high_pc     : 0x14
-     <4e8>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <4ea>   DW_AT_GNU_all_tail_call_sites: 1
-@@ -500,13 +500,13 @@ Contents of the .debug_info.dwo section:
-     <4f0>   DW_AT_decl_line   : 150
-     <4f1>   DW_AT_linkage_name: _Z3t14v
-     <4f9>   DW_AT_type        : <0x249>
--    <4fd>   DW_AT_low_pc      : (addr_index: 0xf): <no .debug_addr section>
-+    <4fd>   DW_AT_low_pc      : (addr_index: 0xf): 0
-     <4fe>   DW_AT_high_pc     : 0x61
-     <506>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <508>   DW_AT_GNU_all_tail_call_sites: 1
-     <508>   DW_AT_sibling     : <0x532>
-  <2><50c>: Abbrev Number: 24 (DW_TAG_lexical_block)
--    <50d>   DW_AT_low_pc      : (addr_index: 0x10): <no .debug_addr section>
-+    <50d>   DW_AT_low_pc      : (addr_index: 0x10): 0
-     <50e>   DW_AT_high_pc     : 0x57
-  <3><516>: Abbrev Number: 25 (DW_TAG_variable)
-     <517>   DW_AT_name        : s1
-@@ -538,13 +538,13 @@ Contents of the .debug_info.dwo section:
-     <54b>   DW_AT_decl_line   : 163
-     <54c>   DW_AT_linkage_name: _Z3t15v
-     <554>   DW_AT_type        : <0x249>
--    <558>   DW_AT_low_pc      : (addr_index: 0x11): <no .debug_addr section>
-+    <558>   DW_AT_low_pc      : (addr_index: 0x11): 0
-     <559>   DW_AT_high_pc     : 0x5d
-     <561>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <563>   DW_AT_GNU_all_tail_call_sites: 1
-     <563>   DW_AT_sibling     : <0x58d>
-  <2><567>: Abbrev Number: 24 (DW_TAG_lexical_block)
--    <568>   DW_AT_low_pc      : (addr_index: 0x12): <no .debug_addr section>
-+    <568>   DW_AT_low_pc      : (addr_index: 0x12): 0
-     <569>   DW_AT_high_pc     : 0x53
-  <3><571>: Abbrev Number: 25 (DW_TAG_variable)
-     <572>   DW_AT_name        : s1
-@@ -576,7 +576,7 @@ Contents of the .debug_info.dwo section:
-     <5a9>   DW_AT_decl_line   : 176
-     <5aa>   DW_AT_linkage_name: _Z3t16v
-     <5b2>   DW_AT_type        : <0x249>
--    <5b6>   DW_AT_low_pc      : (addr_index: 0x13): <no .debug_addr section>
-+    <5b6>   DW_AT_low_pc      : (addr_index: 0x13): 0
-     <5b7>   DW_AT_high_pc     : 0x13
-     <5bf>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <5c1>   DW_AT_GNU_all_tail_call_sites: 1
-@@ -587,13 +587,13 @@ Contents of the .debug_info.dwo section:
-     <5c7>   DW_AT_decl_line   : 184
-     <5c8>   DW_AT_linkage_name: _Z3t17v
-     <5d0>   DW_AT_type        : <0x249>
--    <5d4>   DW_AT_low_pc      : (addr_index: 0x14): <no .debug_addr section>
-+    <5d4>   DW_AT_low_pc      : (addr_index: 0x14): 0
-     <5d5>   DW_AT_high_pc     : 0x5f
-     <5dd>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <5df>   DW_AT_GNU_all_call_sites: 1
-     <5df>   DW_AT_sibling     : <0x612>
-  <2><5e3>: Abbrev Number: 24 (DW_TAG_lexical_block)
--    <5e4>   DW_AT_low_pc      : (addr_index: 0x15): <no .debug_addr section>
-+    <5e4>   DW_AT_low_pc      : (addr_index: 0x15): 0
-     <5e5>   DW_AT_high_pc     : 0x59
-  <3><5ed>: Abbrev Number: 25 (DW_TAG_variable)
-     <5ee>   DW_AT_name        : c
-@@ -602,7 +602,7 @@ Contents of the .debug_info.dwo section:
-     <5f2>   DW_AT_type        : <0x53d>
-     <5f6>   DW_AT_location    : 2 byte block: 91 6f 	(DW_OP_fbreg: -17)
-  <3><5f9>: Abbrev Number: 24 (DW_TAG_lexical_block)
--    <5fa>   DW_AT_low_pc      : (addr_index: 0x16): <no .debug_addr section>
-+    <5fa>   DW_AT_low_pc      : (addr_index: 0x16): 0
-     <5fb>   DW_AT_high_pc     : 0x50
-  <4><603>: Abbrev Number: 25 (DW_TAG_variable)
-     <604>   DW_AT_name        : i
-@@ -620,13 +620,13 @@ Contents of the .debug_info.dwo section:
-     <618>   DW_AT_decl_line   : 199
-     <619>   DW_AT_linkage_name: _Z3t18v
-     <621>   DW_AT_type        : <0x249>
--    <625>   DW_AT_low_pc      : (addr_index: 0x17): <no .debug_addr section>
-+    <625>   DW_AT_low_pc      : (addr_index: 0x17): 0
-     <626>   DW_AT_high_pc     : 0x5f
-     <62e>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <630>   DW_AT_GNU_all_tail_call_sites: 1
-     <630>   DW_AT_sibling     : <0x67a>
-  <2><634>: Abbrev Number: 24 (DW_TAG_lexical_block)
--    <635>   DW_AT_low_pc      : (addr_index: 0x18): <no .debug_addr section>
-+    <635>   DW_AT_low_pc      : (addr_index: 0x18): 0
-     <636>   DW_AT_high_pc     : 0x55
-  <3><63e>: Abbrev Number: 25 (DW_TAG_variable)
-     <63f>   DW_AT_name        : c
-@@ -635,7 +635,7 @@ Contents of the .debug_info.dwo section:
-     <643>   DW_AT_type        : <0x53d>
-     <647>   DW_AT_location    : 2 byte block: 91 6f 	(DW_OP_fbreg: -17)
-  <3><64a>: Abbrev Number: 24 (DW_TAG_lexical_block)
--    <64b>   DW_AT_low_pc      : (addr_index: 0x19): <no .debug_addr section>
-+    <64b>   DW_AT_low_pc      : (addr_index: 0x19): 0
-     <64c>   DW_AT_high_pc     : 0x4c
-  <4><654>: Abbrev Number: 25 (DW_TAG_variable)
-     <655>   DW_AT_name        : i
-@@ -644,7 +644,7 @@ Contents of the .debug_info.dwo section:
-     <659>   DW_AT_type        : <0x242>
-     <65d>   DW_AT_location    : 2 byte block: 91 68 	(DW_OP_fbreg: -24)
-  <4><660>: Abbrev Number: 24 (DW_TAG_lexical_block)
--    <661>   DW_AT_low_pc      : (addr_index: 0x1a): <no .debug_addr section>
-+    <661>   DW_AT_low_pc      : (addr_index: 0x1a): 0
-     <662>   DW_AT_high_pc     : 0x34
-  <5><66a>: Abbrev Number: 25 (DW_TAG_variable)
-     <66b>   DW_AT_name        : s
-@@ -786,7 +786,7 @@ Contents of the .debug_info.dwo section:
-     <7d3>   DW_AT_decl_line   : 32
-     <7d4>   DW_AT_linkage_name: _Z4t16av
-     <7dd>   DW_AT_type        : <0x7c4>
--    <7e1>   DW_AT_low_pc      : (addr_index: 0x0): <no .debug_addr section>
-+    <7e1>   DW_AT_low_pc      : (addr_index: 0x0): 0
-     <7e2>   DW_AT_high_pc     : 0x13
-     <7ea>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <7ec>   DW_AT_GNU_all_tail_call_sites: 1
-@@ -878,14 +878,14 @@ Contents of the .debug_info.dwo section:
-     <908>   DW_AT_decl_file   : 1
-     <909>   DW_AT_decl_line   : 70
-     <90a>   DW_AT_linkage_name: _Z4f13iv
--    <913>   DW_AT_low_pc      : (addr_index: 0x0): <no .debug_addr section>
-+    <913>   DW_AT_low_pc      : (addr_index: 0x0): 0
-     <914>   DW_AT_high_pc     : 0x6
-     <91c>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <91e>   DW_AT_GNU_all_call_sites: 1
-  <1><91e>: Abbrev Number: 17 (DW_TAG_subprogram)
-     <91f>   DW_AT_specification: <0x8a8>
-     <923>   DW_AT_decl_file   : 2
--    <924>   DW_AT_low_pc      : (addr_index: 0x1): <no .debug_addr section>
-+    <924>   DW_AT_low_pc      : (addr_index: 0x1): 0
-     <925>   DW_AT_high_pc     : 0xf
-     <92d>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <92f>   DW_AT_object_pointer: <0x937>
-@@ -903,7 +903,7 @@ Contents of the .debug_info.dwo section:
-     <94b>   DW_AT_specification: <0x89b>
-     <94f>   DW_AT_decl_file   : 2
-     <950>   DW_AT_decl_line   : 36
--    <951>   DW_AT_low_pc      : (addr_index: 0x2): <no .debug_addr section>
-+    <951>   DW_AT_low_pc      : (addr_index: 0x2): 0
-     <952>   DW_AT_high_pc     : 0x20
-     <95a>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <95c>   DW_AT_object_pointer: <0x964>
-@@ -922,7 +922,7 @@ Contents of the .debug_info.dwo section:
-     <978>   DW_AT_decl_line   : 72
-     <979>   DW_AT_linkage_name: _Z3f10v
-     <981>   DW_AT_type        : <0x8b7>
--    <985>   DW_AT_low_pc      : (addr_index: 0x3): <no .debug_addr section>
-+    <985>   DW_AT_low_pc      : (addr_index: 0x3): 0
-     <986>   DW_AT_high_pc     : 0xb
-     <98e>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <990>   DW_AT_GNU_all_call_sites: 1
-@@ -933,7 +933,7 @@ Contents of the .debug_info.dwo section:
-     <997>   DW_AT_decl_line   : 80
-     <998>   DW_AT_linkage_name: _Z4f11bPFivE
-     <9a5>   DW_AT_type        : <0x8b7>
--    <9a9>   DW_AT_low_pc      : (addr_index: 0x4): <no .debug_addr section>
-+    <9a9>   DW_AT_low_pc      : (addr_index: 0x4): 0
-     <9aa>   DW_AT_high_pc     : 0x14
-     <9b2>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <9b4>   DW_AT_GNU_all_tail_call_sites: 1
-@@ -954,7 +954,7 @@ Contents of the .debug_info.dwo section:
-     <9d3>   DW_AT_specification: <0x8e0>
-     <9d7>   DW_AT_decl_file   : 2
-     <9d8>   DW_AT_decl_line   : 88
--    <9d9>   DW_AT_low_pc      : (addr_index: 0x5): <no .debug_addr section>
-+    <9d9>   DW_AT_low_pc      : (addr_index: 0x5): 0
-     <9da>   DW_AT_high_pc     : 0xf
-     <9e2>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <9e4>   DW_AT_object_pointer: <0x9ec>
-@@ -976,7 +976,7 @@ Contents of the .debug_info.dwo section:
-     <a06>   DW_AT_decl_line   : 96
-     <a07>   DW_AT_linkage_name: _Z3f13v
-     <a0f>   DW_AT_type        : <0xa1e>
--    <a13>   DW_AT_low_pc      : (addr_index: 0x6): <no .debug_addr section>
-+    <a13>   DW_AT_low_pc      : (addr_index: 0x6): 0
-     <a14>   DW_AT_high_pc     : 0xb
-     <a1c>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <a1e>   DW_AT_GNU_all_call_sites: 1
-@@ -990,7 +990,7 @@ Contents of the .debug_info.dwo section:
-     <a2a>   DW_AT_decl_line   : 104
-     <a2b>   DW_AT_linkage_name: _Z3f14v
-     <a33>   DW_AT_type        : <0xa42>
--    <a37>   DW_AT_low_pc      : (addr_index: 0x7): <no .debug_addr section>
-+    <a37>   DW_AT_low_pc      : (addr_index: 0x7): 0
-     <a38>   DW_AT_high_pc     : 0xb
-     <a40>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <a42>   DW_AT_GNU_all_call_sites: 1
-@@ -1010,7 +1010,7 @@ Contents of the .debug_info.dwo section:
-     <a5b>   DW_AT_decl_line   : 112
-     <a5c>   DW_AT_linkage_name: _Z3f15v
-     <a64>   DW_AT_type        : <0xa73>
--    <a68>   DW_AT_low_pc      : (addr_index: 0x8): <no .debug_addr section>
-+    <a68>   DW_AT_low_pc      : (addr_index: 0x8): 0
-     <a69>   DW_AT_high_pc     : 0xb
-     <a71>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <a73>   DW_AT_GNU_all_call_sites: 1
-@@ -1030,7 +1030,7 @@ Contents of the .debug_info.dwo section:
-     <a8f>   DW_AT_decl_line   : 127
-     <a90>   DW_AT_linkage_name: _Z3f18i
-     <a98>   DW_AT_type        : <0xa42>
--    <a9c>   DW_AT_low_pc      : (addr_index: 0x9): <no .debug_addr section>
-+    <a9c>   DW_AT_low_pc      : (addr_index: 0x9): 0
-     <a9d>   DW_AT_high_pc     : 0x44
-     <aa5>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
-     <aa7>   DW_AT_GNU_all_call_sites: 1

Deleted: fix-incorrect-undefined-symbol.patch
===================================================================
--- fix-incorrect-undefined-symbol.patch	2022-08-05 14:47:47 UTC (rev 452084)
+++ fix-incorrect-undefined-symbol.patch	2022-08-05 15:24:35 UTC (rev 452085)
@@ -1,114 +0,0 @@
-From 20ea3acc727f3be6322dfbd881e506873535231d Mon Sep 17 00:00:00 2001
-From: "H.J. Lu" <hjl.tools at gmail.com>
-Date: Fri, 11 Feb 2022 15:13:19 -0800
-Subject: [PATCH] ld: Keep indirect symbol from IR if referenced from shared
- object
-
-Don't change indirect symbol defined in IR to undefined if it is
-referenced from shared object.
-
-bfd/
-
-	PR ld/28879
-	* elflink.c (_bfd_elf_merge_symbol): Don't change indirect
-	symbol defined in IR to undefined if it is referenced from
-	shared object.
-
-ld/
-
-	PR ld/28879
-	* testsuite/ld-plugin/lto.exp: Run PR ld/28879 tests.
-	* testsuite/ld-plugin/pr28879a.cc: New file.
-	* testsuite/ld-plugin/pr28879b.cc: Likewise.
----
- bfd/elflink.c                      |  5 ++---
- ld/testsuite/ld-plugin/lto.exp     | 26 ++++++++++++++++++++++++++
- ld/testsuite/ld-plugin/pr28879a.cc |  7 +++++++
- ld/testsuite/ld-plugin/pr28879b.cc |  8 ++++++++
- 4 files changed, 43 insertions(+), 3 deletions(-)
- create mode 100644 ld/testsuite/ld-plugin/pr28879a.cc
- create mode 100644 ld/testsuite/ld-plugin/pr28879b.cc
-
-diff --git a/bfd/elflink.c b/bfd/elflink.c
-index 6fa18d92007..f8521426cad 100644
---- a/bfd/elflink.c
-+++ b/bfd/elflink.c
-@@ -1294,9 +1294,8 @@ _bfd_elf_merge_symbol (bfd *abfd,
- 	  h->root.non_ir_ref_dynamic = true;
- 	  hi->root.non_ir_ref_dynamic = true;
- 	}
--
--      if ((oldbfd->flags & BFD_PLUGIN) != 0
--	  && hi->root.type == bfd_link_hash_indirect)
-+      else if ((oldbfd->flags & BFD_PLUGIN) != 0
-+	       && hi->root.type == bfd_link_hash_indirect)
- 	{
- 	  /* Change indirect symbol from IR to undefined.  */
- 	  hi->root.type = bfd_link_hash_undefined;
-diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
-index a70a84562b8..64b880265ee 100644
---- a/ld/testsuite/ld-plugin/lto.exp
-+++ b/ld/testsuite/ld-plugin/lto.exp
-@@ -471,6 +471,32 @@ set lto_link_elf_tests [list \
-   [list {pr27441c.so} \
-    {-shared -fPIC -Wl,--as-needed tmpdir/pr27441c.o tmpdir/pr27441b.so tmpdir/pr27441a.so} {-fPIC} \
-    {dummy.c} {{readelf {-dW} pr27441c.d}} {pr27441c.so}] \
-+  [list \
-+   "Build libpr28879a.so" \
-+   "-shared" \
-+   "-O0 -fpic" \
-+   {pr28879a.cc} \
-+   {} \
-+   "libpr28879a.so" \
-+   "c++" \
-+  ] \
-+  [list \
-+   "Build libpr28879b.so" \
-+   "-shared -Wl,--no-as-needed tmpdir/libpr28879a.so" \
-+   "-O2 -fpic" \
-+   {dummy.c} \
-+   {} \
-+   "libpr28879b.so" \
-+  ] \
-+  [list \
-+   "Build pr28879" \
-+   "-Wl,--no-as-needed tmpdir/libpr28879b.so -Wl,-rpath-link,." \
-+   "-O0 -flto -D_GLIBCXX_ASSERTIONS" \
-+   {pr28879b.cc} \
-+   {} \
-+   "pr28879" \
-+   "c++" \
-+  ] \
- ]
- 
- # PR 14918 checks that libgcc is not spuriously included in a shared link of
-diff --git a/ld/testsuite/ld-plugin/pr28879a.cc b/ld/testsuite/ld-plugin/pr28879a.cc
-new file mode 100644
-index 00000000000..8307a42e2fb
---- /dev/null
-+++ b/ld/testsuite/ld-plugin/pr28879a.cc
-@@ -0,0 +1,7 @@
-+#include <string>
-+
-+void
-+func (std::string *s)
-+{
-+  delete s;
-+}
-diff --git a/ld/testsuite/ld-plugin/pr28879b.cc b/ld/testsuite/ld-plugin/pr28879b.cc
-new file mode 100644
-index 00000000000..02fc351366c
---- /dev/null
-+++ b/ld/testsuite/ld-plugin/pr28879b.cc
-@@ -0,0 +1,8 @@
-+#include <string>
-+
-+int
-+main (void)
-+{
-+  std::string header;
-+  return 0;
-+}
--- 
-2.35.1
-



More information about the arch-commits mailing list